Java 12 web socket Client
Para este ejemplo vamos a usar la librería de
java.net.http con la que podemos usar un objeto de webSocket que nos permitirá
conectarnos a algún servicio. En este caso vamos a utilizar un websocket para
hacer testing.
También ocupamos usar un servidor publico para
hacer testing del websocket http://www.websocket.org/echo.html
Lo primero que vamos a crear es una clase
nuevo, con el nombre de WebSocketClient. En esta clase tenemos que hacer un
import de la libreria java.net.http.WebSocket. Con esto podremos hacer un
implements de la interfaz WebSocket.Listener.
public class WebSocketClient implements WebSocket.Listener {
@Override
public void onOpen(WebSocket webSocket) {
webSocket.request(1);
System.out.println("We are connected to the server");
}
@Override
public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
System.out.println("Close websocket: " + reason);
webSocket.sendClose(statusCode, reason);
return new CompletableFuture<Void>();
}
@Override
public void onError(WebSocket webSocket, Throwable error) {
System.out.println("Exception " + error.getCause());
System.out.println("Error: " + error.getLocalizedMessage());
webSocket.abort();
}
@Override
public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
System.out.println("Data we got from server: " + data);
return new CompletableFuture().completedFuture("onText completed.").thenAccept(System.out::println);
}
}
Para que nuestro sistema funcione se tiene que
agregar los siguientes paquetes a la clase.
import java.net.http.WebSocket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
Con esta interfaz podemos sobrescribir una
serie de métodos para poder establecer la comunicación correcta con el
servicio.
Para este ejemplo vamos a usar el metodo onOpen
para conectarnos al webSocket, onClose para poder cerrar la conexion del
webSocket, onError en caso de que alguna cosa ocurra con la conexion que
estamos estableciendo con el servidor, onText que nos permite recibir las
respuestas del servidor.
Ahora nos vamos hacer una clase nueva para
nuestro metodo main para poder ejecutar nuestro sistema para conectarnos al
websocket.
Debemos hacer los siguientes imports para poder
inicializar nuestro cliente
import java.net.URI;
import java.net.http.HttpClient;
import javax.swing.JOptionPane;
Ahora tenemos que crear un objeto de tipo
WebSocketClient que tiene los métodos que esperan los eventos del websocket.
Luego creamos otro objeto (httpClient) usando el newHttpClient() usando el método newWebSocketBuilder vamos a crear nuestra conexión. Que tiene un método llamado buildAsync el cual requiere del URL de nuestro websocket y le pasamos el objeto que tiene todos los eventos para usar el websocket.
public static void main(String[] args) { var client = new WebSocketClient(); var serverConection = HttpClient.newHttpClient().newWebSocketBuilder().buildAsync(URI.create("ws://echo.websocket.org"), client); var connectedClient = serverConection.join(); var result = JOptionPane.showInputDialog("Message"); while (true) { connectedClient.sendText(result, true); result = JOptionPane.showInputDialog("Message"); } }
Luego creamos otro objeto (httpClient) usando el newHttpClient() usando el método newWebSocketBuilder vamos a crear nuestra conexión. Que tiene un método llamado buildAsync el cual requiere del URL de nuestro websocket y le pasamos el objeto que tiene todos los eventos para usar el websocket.
Con esto ya podemos crear una variable String
que recibe un texto del JOptionPane con los mensajes que el usuario le quiere
enviar al servidor. Con el método sendText podemos enviar los mensajes que el
usuario quiere. La respuesta la vamos a esperar en el método onText.
Etiquetas: Apache Netbeans, Java, Java 12, NetBeans, websocket