Netty:正确关闭WebSockets

时间:2012-01-23 16:29:28

标签: websocket netty

如何正确关闭服务器端的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?)。

3 个答案:

答案 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);