如何正确关闭服务器端的WebSocket频道/连接?如果我使用ctx.getChannel().close()
,则会抛出Brwoser中的onerror
(Firefox 9):
与ws:// localhost:8080 / websocket的连接在页面加载时被中断
我还尝试在CloseWebSocketFrame
中的channelClosed
- 方法中发送WebSocketServerHandler
:
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
CloseWebSocketFrame close = new CloseWebSocketFrame();
ctx.getChannel().write(close);
}
这会引发ClosedChannelException
(可能是相关的to this?)。
答案 0 :(得分:5)
你必须这样做:
ch.write(new CloseWebSocketFrame());
然后服务器将关闭连接。如果连接未尽快关闭,您可以致电ch.close()
。
答案 1 :(得分:1)
怎么样
ctx.getChannel().write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE);
那应该发送CloseWebSocketFrame,然后关闭通道。
答案 2 :(得分:0)
您使用的是哪个版本?
你有没有试过这个:
ctx.getChannel().write(ChannelBuffers.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);