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

时间:2017-07-01 00:58:52

标签: java websocket server jetty

我正在使用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) {

    }
}

我的一个要求是根据业务逻辑ins onBinaryMethod发送自定义状态代码 例如:发送1001作为超时的状态代码(Jetty已经支持此功能)

我不确定在哪里设置这些状态代码。我试过跟随,但似乎没有效果。

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

1 个答案:

答案 0 :(得分:3)

<强> 的WebSockets

以下是关于WebSocket状态代码的RFC

socket通信期间您不应在状态代码中发送此类信息。请使用客户端所需的信息发送message

如果您对关闭代码感兴趣,可以在Session对象上提供此信息,如下所示:

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

<强> REST

如果您依赖这些代码使用 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

相关问题