Traitement - comment envoyer des données (à travers les websockets?) à javascript de l'application
Je suis en train de jouer autour du traitement et de l'émerveillement, si je peut envoyer des données à partir de la transformation d'une application javascript. Est-il possible de créer un (par exemple, websocket) serveur avec le traitement?
J'ai essayé Java WebSockets dans eclipse pour ordinateur de bureau(avec ou sans extension de PApplet) et elle fonctionne sur Android. Si vous souhaitez utiliser la bibliothèque dans le Traitement de vous avez besoin pour ce faire:
créer un dossier nommé java_websocket dans les Documents de Traitement et des bibliothèques
À l'intérieur de la nouvellement créée java_websocket dossier, créez un autre dossier nommé bibliothèque et drop java_websocket.jar il y
Redémarrer le Traitement et commencer à utiliser la bibliothèque (dessin > bibliothèque d'importation doit liste java_websocket maintenant)
Et voici le projet de code de l'échantillon dans le traitement de:
Le serveur:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetSocketAddress;import java.net.UnknownHostException;import java.util.Collection;import org.java_websocket.WebSocket;import org.java_websocket.WebSocketImpl;import org.java_websocket.handshake.ClientHandshake;import org.java_websocket.server.WebSocketServer;void setup(){newServerThread().start();}//create a separate thread for the server not to freeze/interfere with Processing's default animation threadpublicclassServerThreadextendsThread{@Overridepublicvoid run(){try{WebSocketImpl.DEBUG =true;int port =8887;//843 flash policy porttry{
port =Integer.parseInt( args[0]);}catch(Exception ex ){}ChatServer s =newChatServer( port );
s.start();System.out.println("ChatServer started on port: "+ s.getPort());BufferedReader sysin =newBufferedReader(newInputStreamReader(System.in));while(true){Stringin= sysin.readLine();
s.sendToAll(in);}}catch(IOException e){
e.printStackTrace();}}}publicclassChatServerextendsWebSocketServer{publicChatServer(int port )throwsUnknownHostException{super(newInetSocketAddress( port ));}publicChatServer(InetSocketAddress address ){super( address );}@Overridepublicvoid onOpen(WebSocket conn,ClientHandshake handshake ){this.sendToAll("new connection: "+ handshake.getResourceDescriptor());System.out.println( conn.getRemoteSocketAddress().getAddress().getHostAddress()+" entered the room!");}@Overridepublicvoid onClose(WebSocket conn,int code,String reason,boolean remote ){this.sendToAll( conn +" has left the room!");System.out.println( conn +" has left the room!");}@Overridepublicvoid onMessage(WebSocket conn,String message ){this.sendToAll( message );System.out.println( conn +": "+ message );}@Overridepublicvoid onError(WebSocket conn,Exception ex ){
ex.printStackTrace();if( conn !=null){//some errors like port binding failed may not be assignable to a specific websocket}}/**
* Sends <var>text</var> to all currently connected WebSocket clients.
*
* @param text
* The String to send across the network.
* @throws InterruptedException
* When socket related I/O errors occur.
*/publicvoid sendToAll(String text ){Collection<WebSocket> con = connections();synchronized( con ){for(WebSocket c : con ){
c.send( text );}}}}
un client de test:
import java.awt.Container;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.net.URI;import java.net.URISyntaxException;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import org.java_websocket.WebSocketImpl;import org.java_websocket.client.WebSocketClient;import org.java_websocket.drafts.Draft;import org.java_websocket.drafts.Draft_10;import org.java_websocket.drafts.Draft_17;import org.java_websocket.drafts.Draft_75;import org.java_websocket.drafts.Draft_76;import org.java_websocket.handshake.ServerHandshake;void setup(){WebSocketImpl.DEBUG =true;newChatClient("ws://localhost:8887");}publicclassChatClientextendsJFrameimplementsActionListener{privatestaticfinallong serialVersionUID =-6056260699202978657L;privatefinalJTextField uriField;privatefinalJButton connect;privatefinalJButton close;privatefinalJTextArea ta;privatefinalJTextField chatField;privatefinalJComboBox draft;privateWebSocketClient cc;publicChatClient(String defaultlocation ){super("WebSocket Chat Client");Container c = getContentPane();GridLayout layout =newGridLayout();
layout.setColumns(1);
layout.setRows(6);
c.setLayout( layout );Draft[] drafts ={newDraft_17(),newDraft_10(),newDraft_76(),newDraft_75()};
draft =newJComboBox( drafts );
c.add( draft );
uriField =newJTextField();
uriField.setText( defaultlocation );
c.add( uriField );
connect =newJButton("Connect");
connect.addActionListener(this);
c.add( connect );
close =newJButton("Close");
close.addActionListener(this);
close.setEnabled(false);
c.add( close );JScrollPane scroll =newJScrollPane();
ta =newJTextArea();
scroll.setViewportView( ta );
c.add( scroll );
chatField =newJTextField();
chatField.setText("");
chatField.addActionListener(this);
c.add( chatField );
java.awt.Dimension d =new java.awt.Dimension(300,400);
setPreferredSize( d );
setSize( d );
addWindowListener(new java.awt.event.WindowAdapter(){@Overridepublicvoid windowClosing(WindowEvent e ){if( cc !=null){
cc.close();}
dispose();}});
setLocationRelativeTo(null);
setVisible(true);}publicvoid actionPerformed(ActionEvent e ){if( e.getSource()== chatField ){if( cc !=null){
cc.send( chatField.getText());
chatField.setText("");
chatField.requestFocus();}}elseif( e.getSource()== connect ){try{//cc = new ChatClient(new URI(uriField.getText()), area, ( Draft ) draft.getSelectedItem() );
cc =newWebSocketClient(new URI( uriField.getText()),(Draft) draft.getSelectedItem()){@Overridepublicvoid onMessage(String message ){
ta.append("got: "+ message +"\n");
ta.setCaretPosition( ta.getDocument().getLength());}@Overridepublicvoid onOpen(ServerHandshake handshake ){
ta.append("You are connected to ChatServer: "+ getURI()+"\n");
ta.setCaretPosition( ta.getDocument().getLength());}@Overridepublicvoid onClose(int code,String reason,boolean remote ){
ta.append("You have been disconnected from: "+ getURI()+"; Code: "+ code +" "+ reason +"\n");
ta.setCaretPosition( ta.getDocument().getLength());
connect.setEnabled(true);
uriField.setEditable(true);
draft.setEditable(true);
close.setEnabled(false);}@Overridepublicvoid onError(Exception ex ){
ta.append("Exception occured ...\n"+ ex +"\n");
ta.setCaretPosition( ta.getDocument().getLength());
ex.printStackTrace();
connect.setEnabled(true);
uriField.setEditable(true);
draft.setEditable(true);
close.setEnabled(false);}};
close.setEnabled(true);
connect.setEnabled(false);
uriField.setEditable(false);
draft.setEditable(false);
cc.connect();}catch(URISyntaxException ex ){
ta.append( uriField.getText()+" is not a valid WebSocket URI\n");}}elseif( e.getSource()== close ){
cc.close();}}}
C'est assez bien collé le code Java qui est détaillé. Mais il devrait être facile à faire quelques helper/classes wrapper si nécessaire.
Faire une recherche rapide renvoie ces maniable résultats:
J'ai été récemment présenté un nouveau Websockets bibliothèque appelée spacebrew qui est excellent pour votre enquête, surtout depuis qu'ils semblent avoir enveloppé le java_websocket bien derrière les coulisses.
Maintenant à vous de l'utiliser comme tout autre Traitement de la bibliothèque, l'utilisation est très simplifiée(pas de bibliothèque java de l'expérience nécessaire, il suffit de Traitement) et les exemples sont très!
J'ai découvert le biais d'une autre question qui m'a permis de trouver qu'il en fait, il fonctionne hors de la boîte sur votre Appareil Android ainsi hors de la boîte(il suffit de cocher l'INTERNET box). C'est pas génial ?
D'obtenir tous que doux websocket action en cours comme ce n'est pas la chose et le bonus, c'est android pris en charge.
Rapidement prototype sur votre bureau, puis obtenir votre projet de travail à partir de votre poche.
Spacebrew ♥ Traitement
Très détaillée de la réponse, merci beaucoup! Pour le moment je suis en utilisant une solution de contournement: le Traitement commence CVMO serveur et un Node.js pont transfère les données de la CVMO serveur pour les websockets. Pourtant, je vais essayer votre code. Merci pour le poste détaillée @George Profenza. Mon serveur est créé via nodejs/socket.io et chaque fois que je tente et de s'y connecter via le Traitement ci-dessus client - je recevoir " détruire la non-prise.io de mise à niveau "de mon serveur et sur le Traitement de la fin" Vous avez été déconnecté de: ws://xx.xx.x.x.x'. Est-ce à dire ce websocket bibliothèque n'est pas compatible avec la prise.io? Une idée de comment je peux me connecter à une prise de courant.io websocket en particulier? Pour les futurs lecteurs, j'ai changé de support.io ws et tout a fonctionné. Curieux de savoir pourquoi socket.io n'est pas aussi universel/compatible... Incroyablement réponse détaillée. Good job!!! @Robbie socket.io les clients se connectent à la prise.io serveurs - ils ne sont pas compatibles avec la vanille WS.
J'ai essayé Java WebSockets dans eclipse pour ordinateur de bureau(avec ou sans extension de PApplet) et elle fonctionne sur Android. Si vous souhaitez utiliser la bibliothèque dans le Traitement de vous avez besoin pour ce faire:
Et voici le projet de code de l'échantillon dans le traitement de:
Le serveur:
un client de test:
C'est assez bien collé le code Java qui est détaillé. Mais il devrait être facile à faire quelques helper/classes wrapper si nécessaire.
Faire une recherche rapide renvoie ces maniable résultats:
Mise à JOUR
J'ai été récemment présenté un nouveau Websockets bibliothèque appelée spacebrew qui est excellent pour votre enquête, surtout depuis qu'ils semblent avoir enveloppé le java_websocket bien derrière les coulisses.
Maintenant à vous de l'utiliser comme tout autre Traitement de la bibliothèque, l'utilisation est très simplifiée(pas de bibliothèque java de l'expérience nécessaire, il suffit de Traitement) et les exemples sont très!
J'ai découvert le biais d'une autre question qui m'a permis de trouver qu'il en fait, il fonctionne hors de la boîte sur votre Appareil Android ainsi hors de la boîte(il suffit de cocher l'INTERNET box). C'est pas génial ?
D'obtenir tous que doux websocket action en cours comme ce n'est pas la chose et le bonus, c'est android pris en charge.
Rapidement prototype sur votre bureau, puis obtenir votre projet de travail à partir de votre poche.
Spacebrew ♥ Traitement
Merci pour le poste détaillée @George Profenza. Mon serveur est créé via nodejs/socket.io et chaque fois que je tente et de s'y connecter via le Traitement ci-dessus client - je recevoir " détruire la non-prise.io de mise à niveau "de mon serveur et sur le Traitement de la fin" Vous avez été déconnecté de: ws://xx.xx.x.x.x'. Est-ce à dire ce websocket bibliothèque n'est pas compatible avec la prise.io? Une idée de comment je peux me connecter à une prise de courant.io websocket en particulier?
Pour les futurs lecteurs, j'ai changé de support.io ws et tout a fonctionné. Curieux de savoir pourquoi socket.io n'est pas aussi universel/compatible...
Incroyablement réponse détaillée. Good job!!! @Robbie socket.io les clients se connectent à la prise.io serveurs - ils ne sont pas compatibles avec la vanille WS.
OriginalL'auteur George Profenza