jetty websocket服务器:根据应用程序逻辑发送客户状态码

我正在写一个使用Jetty的Websocket服务器。

我的处理代码:

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) {

    }
}

我的要求之一是发送基于业务逻辑insde onBinaryMethod自定义状态代码
例如:发送1001作为超时状态码 (Jetty已经支持这个)

我不确定在哪里设置这些状态码。 我试过以下,但似乎并不奏效。

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

的WebSockets

这里是关于WebSocket状态码的RFC

在与socket进行通信期间,您不应在状态代码中发送此类信息。 发送message而不是客户需要的信息。

如果您碰巧有兴趣关闭代码,您可以在Session对象上提供这些信息,如下所示:

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

休息

如果您依赖这些代码使用REST服务 ,那么有很多选择:

  • 抛出一个特定的异常
  • 使用响应构建器并返回响应
  • 注入上下文
  • 我认为实现你的目标最简单的方法是使用setStatus(int)

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

    这是一个很好的答案,列出了很多可能的解决方案:

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

    链接地址: http://www.djcxy.com/p/45589.html

    上一篇: jetty websocket server: Send customer status code based on application logic

    下一篇: How to get a status code?