Solución:
nv-websocket-cliente es una nueva biblioteca cliente de WebSocket escrita en Java. Apoya wss y solo requiere Java SE 1.5, por lo que puede ejecutarse incluso en Android.
La talla de nv-websocket-client-1.3.jar
(lanzado el 2015-05-06) tiene 62,854 bytes y no requiere ninguna dependencia externa.
A continuación se muestra un ejemplo de “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
Biblioteca cliente de 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
http://takahikokawasaki.github.io/nv-websocket-client/
Maven
<dependency>
<groupId>com.neovisionaries</groupId>
<artifactId>nv-websocket-client</artifactId>
<version>1.3</version>
</dependency>
¡El cliente de Tyrus no necesita tener un servidor de aplicaciones! 🙂
Consulte la documentación de Tyrus y la publicación de blog Reducción del tamaño del jar del cliente WebSocket con ProGuard (puede bajar a 500 kB con JDK 7+).
Acerca del tamaño: se puede minimizar aún más, pero con algo de refactorización en el código de Tyrus. La comparación de WebSocket y el socket simple no es muy precisa: el socket simple no necesita implementar HTTP y (tradicionalmente) no tenía soporte NIO (que venía con Java 7). Otra parte es la implementación del protocolo WebSocket, que no es tan difícil, pero tampoco es solo enviar bytes.[] al cable: hay un apretón de manos de apertura, tramas de señalización y codificación / decodificación UTF-8 estricta obligatoria.
Así que supongo que podría encontrar una implementación de API más simple, pero apegarse a algo que se mantiene y es parte de Java EE no me parece malo; tiene la posibilidad de elegir la implementación (Tyrus es solo una de ellas, hay otras ) y su cliente estará listo para su inclusión en la aplicación Java EE si eso sucediera. (Nota del editor: trabajo en Tyrus, por lo que es muy probable que mi respuesta sea parcial).