我正在使用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();
答案 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);
}
这是一个很好的答案,列出了许多可能的解决方案: