当我的服务器发生内部错误时,如何正确关闭 websocket 并向客户端提供干净、信息丰富的响应?在我当前的情况下,客户端在连接时必须提供一个参数,并且我正在尝试处理 OnOpen 收到的不正确或丢失的参数。
这个例子表明我可以在 OnOpen 中抛出一个异常,它最终会调用 OnError ,我可以在其中给出原因和消息来关闭。它有点工作,但客户端只收到 EOF、1006、CLOSE_ABNORMAL。
另外,因为我没有找到其他讨论,所以我无法说出什么可能是最佳实践。
我正在使用 JSR-356 规范,如下所示:
@ClientEndpoint
@ServerEndpoint(value="/ws/events/")
public class WebSocketEvents
{
private javax.websocket.Session session;
private long token;
@OnOpen
public void onWebSocketConnect(javax.websocket.Session session) throws BadRequestException
{
logger.info("WebSocket connection attempt: " + session);
this.session = session;
// this throws BadRequestException if null or invalid long
// with short detail message, e.g., "Missing parameter: token"
token = HTTP.getRequiredLongParameter(session, "token");
}
@OnMessage
public void onWebSocketText(String message)
{
logger.info("Received text message: " + message); …Run Code Online (Sandbox Code Playgroud)