2015-04-01 15 views
5

Ho passato un po 'di tempo per trovare semplice java client websocket che potrebbe lavorare con WSS e non sarà un casino ...minima java8 nio sicuro websocket cliente (WSS)

Ho provato https://github.com/TooTallNate/Java-WebSocket

aggiunto dipendenza come egli descirbes, copiato il SSLClientExample.java per testarlo con echo server websocket.org, ma ha ottenuto errore di compilazione alla riga 84 nessun metodo setSocket() ... (bloccato qui)

Ho provato tyrus (sembra che questa sia una grande libreria sviluppata direttamente da Oracle) ma sembra che sia necessario avere qualche appserver in esecuzione (contenitore websocket) per essere in grado di se questo ...

Mi chiedo che cosa è così difficile per le web socket che uno ha bisogno di avere netty o glassfish o grizly per questo?

Penso che sia possibile implementarne uno utilizzando SSLEngine (wss) e puro java sdk ... c'è qualcosa che non so sui websockets? (lo immagino molto simile alle prese ordinarie)

risposta

15

nv-websocket-client è una nuova libreria client WebSocket scritta in Java. Supporta wss e richiede solo Java SE 1.5, quindi può essere eseguito anche su Android.

La dimensione di nv-websocket-client-1.3.jar (rilasciata il 2015-05-06) è 62.854 byte e non richiede alcuna dipendenza esterna.

Di seguito è riportato un esempio di "wss".

import com.neovisionaries.ws.client.*; 

public class HelloWSS 
{ 
    public static void main(String[] args) throws Exception 
    { 
     // Connect to "wss://echo.websocket.org" and send "Hello." to it. 
     // When a response from the WebSocket server is received, the 
     // WebSocket connection is closed. 
     new WebSocketFactory() 
      .createSocket("wss://echo.websocket.org") 
      .addListener(new WebSocketAdapter() { 
       @Override 
       public void onTextMessage(WebSocket ws, String message) { 
        // Received a response. Print the received message. 
        System.out.println(message); 

        // Close the WebSocket connection. 
        ws.disconnect(); 
       } 
      }) 
      .connect() 
      .sendText("Hello."); 
    } 
} 

Blog
libreria client WebSocket (Java SE 1.5+, Android)
http://darutk-oboegaki.blogspot.jp/2015/05/websocket-client-library-java-se-15.html

GitHub
https://github.com/TakahikoKawasaki/nv-websocket-client

JavaDoc 0.123. http://takahikokawasaki.github.io/nv-websocket-client/

Maven

<dependency> 
    <groupId>com.neovisionaries</groupId> 
    <artifactId>nv-websocket-client</artifactId> 
    <version>1.3</version> 
</dependency> 
+0

Grazie, questo è molto bello, finalmente vedo la normale aip simiple. – vach

+0

Lo aggiungo come dipendenza ma non sembra in un repository pubblico, sei sicuro che non ci sia un repository specifico da aggiungere? Inoltre è .connect() una chiamata di blocco? – vach

+1

Puoi trovarlo nel [Maven Central Repository] (http://search.maven.org/#artifactdetails|com.neovisionaries|nv-websocket-client|1.3|jar). connect() blocchi di metodo fino a quando WebSocket [apertura handshake] (https://tools.ietf.org/html/rfc6455#section-4) è terminato. Dopo un handshake riuscito, vengono avviati due thread interni e restituisce il metodo connect(). L'invio e la ricezione di frame WebSocket vengono eseguiti in modo asincrono. Vedi Blog, JavaDoc o README.md per i dettagli. –

1

Tyrus il client non ha bisogno di avere un appserver! :)

Si prega di vedere Tyrus documentation e blogpost Reducing WebSocket client jar size with ProGuard (si può scendere fino a 500 kB con JDK 7+).

Circa la dimensione - può essere ridotto al minimo ancora di più, ma con alcuni refactoring nel codice Tyrus. Il confronto tra WebSocket e plain socket non è molto accurato: il socket normale non ha bisogno di implementare HTTP e (tradizionalmente) non aveva il supporto NIO (fornito con Java 7). Un'altra parte è l'implementazione del protocollo WebSocket, che non è poi così difficile, ma non è solo l'invio di byte [] al cavo: c'è una stretta di mano in apertura, frame di segnalazione e codifica/decodifica UTF-8 obbligatoria.

Quindi penso che si possa trovare un'implementazione API più semplice, ma attenersi a qualcosa che è mantenuto e fa parte di Java EE non mi sembra un problema - hai la possibilità di scegliere l'implementazione (Tyrus è solo uno di loro ce ne sono altri) e il tuo cliente sarà pronto per l'inclusione nell'applicazione Java EE se ciò dovesse accadere. (Nota dell'editore: io lavoro su Tyrus, quindi la mia risposta è probabilmente distorta).

+0

mi piace Tyrus, dopotutto la sua gestito da ragazzi di Oracle, grazie per il link, vado a controllare fuori e provare ... se funziona i' ll post qui ... ho solo bisogno di wss che supporta client websocket, senza alcun molo o qualsiasi pesce :))) – vach

+0

Pavel Posso vederti svilupparne molto, sto avendo 2 problemi adesso, per favore aiutali con questi se hai un po 'di tempo Funziona ora senza alcun appserver che è quello che mi aspettavo naturalmente, ma 1. ora ho bisogno di configurare SSLContextConfigurator, che non è nelle mie dipendenze (ho solo ora "tyrus-container-jdk-client" 1.10) cosa altro ho bisogno? 2. Non so davvero cosa siano il keystore/truststore e come li creo per un dominio particolare ... Ho aggiunto con successo nuovi certificati ssl in java cacerts ma questo sembra qualcosa di diverso ... Dove potrei leggere su Questo? – vach

+2

non è necessario impostare SSLContextConfigurator - se il tuo JDK è configurato correttamente, verrà prelevato automaticamente. SslContextConfigurator è in org.glassfish.tyrus: modulo tyrus-client (per favore usa la stessa versione - 1,10 nel tuo caso). E puoi anche beneficiare del "pacchetto standalone all-in-one": org.glassfish.tyrus.bundles: tyrus-standalone-client-jdk; http://search.maven.org/#artifactdetails%7Corg.glassfish.tyrus.bundles%7Ctyrus-standalone-client-jdk%7C1.10%7Cjar. –

1

Provare il client Websocket semplice di Matthias. (Sono solo uno dei suoi follower su Twitter) Puoi concordare la sua intenzione di fondo di quel progetto.

Da https://github.com/matzew/simple-websocket-client

La JSR 356 descrive un API standard per i WebSocket Server e client, ma il client API è molto complessa. Questo progetto mira a offrire un client semplificato.

BTW, Qualsiasi client WebSocket non richiede server WebSocket ed è possibile scrivere il proprio client su Java SE puro. Tuttavia, poiché la facilità di integrazione con altre tecnologie è molto più importante della semplice semplicità, potreste sentire che esiste un contesto sottostante che appare complesso e non necessario.

+1

Grazie, per il collegamento, ma per quanto vedo non supporta connessioni sicure wss che è quello che mi serve. – vach