websockets ejemplo crear java websocket server jetty

java - ejemplo - embarcadero websocket server: envíe el código de estado del cliente basado en la lógica de la aplicación



websocket service java (1)

Estoy escribiendo un servidor Websocket usando Jetty.

Mi código de controlador:

public class WebSocketServerHandler { @OnWebSocketClose public void onClose(int statusCode, String reason) { System.out.println("Close: statusCode=" + statusCode + ", reason=" + reason); } @OnWebSocketError public void onError(Throwable t) { } @OnWebSocketConnect public void onConnect(Session session) { } @OnWebSocketMessage public void onMessage(Session session, String message) { } @OnWebSocketMessage public void onBinaryMethod(Session session, byte data[], int offset, int length) { } }

Uno de mis requisitos es enviar código de estado personalizado basado en lógica de negocios insde onBinaryMethod
Ejemplo: envíe 1001 como código de estado para el tiempo de espera (Jetty ya lo admite)

No estoy seguro de dónde establecer estos códigos de estado. He intentado seguir, pero parece que no funciona.

Session().getUpgradeResponse().setStatusCode();


WebSockets

Aquí está el RFC respecto a los códigos de estado de WebSocket.

Durante la comunicación con el socket , no se supone que deba enviar dicha información en los códigos de estado. Envíe un message con la información que necesita el cliente.

Si está interesado en el cierre de códigos , puede proporcionar esta información en el objeto Session siguiente manera:

session.close(new CloseReason(YOUR_NUMBER, "Your reason"));

DESCANSO

Si confía en esos códigos, use los servicios REST , hay muchas opciones allí:

  • Lanzar una excepción específica
  • Usar el generador de respuestas y devolver la respuesta
  • Inyectar el contexto

Creo que la forma más fácil de lograr Tu objetivo es usar setStatus(int) :

@Context HttpServletResponse response; @Path("/method") public void onBinaryMethod() { int statusCode = 200; //SOME CODE response.setStatus(statusCode); }

Aquí hay una buena respuesta que enumera muchas soluciones posibles:

https://.com/a/22869076/4823977