jetty websocket server:根据应用逻辑发送客户状态码
jetty websocket server: Send customer status code based on application logic
我正在使用 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) {
}
}
我的一个要求是发送基于业务逻辑的自定义状态代码 onBinaryMethod
例如:发送 1001 作为超时状态码(Jetty 已经支持)
我不知道在哪里设置这些状态代码。我试过跟随,但似乎没有用。
Session().getUpgradeResponse().setStatusCode();
WebSockets
这里是关于WebSocket状态码的RFC
在与 socket
通信期间,您不应该在状态代码中发送此类信息。发送 message
而不是客户需要的信息。
如果您碰巧对关闭代码感兴趣,您可以在 Session
对象上提供此信息,如下所示:
session.close(new CloseReason(YOUR_NUMBER, "Your reason"));
REST
如果您依赖这些代码使用 REST 服务,那里有很多选项:
- 引发特定异常
- 使用响应生成器和return响应
- 注入上下文
我认为实现您的目标的最简单方法是使用 setStatus(int)
:
@Context
HttpServletResponse response;
@Path("/method")
public void onBinaryMethod() {
int statusCode = 200;
//SOME CODE
response.setStatus(statusCode);
}
这是一个很好的答案,列出了很多可能的解决方案:
我正在使用 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) {
}
}
我的一个要求是发送基于业务逻辑的自定义状态代码 onBinaryMethod
例如:发送 1001 作为超时状态码(Jetty 已经支持)
我不知道在哪里设置这些状态代码。我试过跟随,但似乎没有用。
Session().getUpgradeResponse().setStatusCode();
WebSockets
这里是关于WebSocket状态码的RFC
在与 socket
通信期间,您不应该在状态代码中发送此类信息。发送 message
而不是客户需要的信息。
如果您碰巧对关闭代码感兴趣,您可以在 Session
对象上提供此信息,如下所示:
session.close(new CloseReason(YOUR_NUMBER, "Your reason"));
REST
如果您依赖这些代码使用 REST 服务,那里有很多选项:
- 引发特定异常
- 使用响应生成器和return响应
- 注入上下文
我认为实现您的目标的最简单方法是使用 setStatus(int)
:
@Context
HttpServletResponse response;
@Path("/method")
public void onBinaryMethod() {
int statusCode = 200;
//SOME CODE
response.setStatus(statusCode);
}
这是一个很好的答案,列出了很多可能的解决方案: