[英]Netty: Closing WebSockets correctly
如何從服務器端正確關閉WebSocket通道/連接? 如果我使用一個ctx.getChannel().close()
時, onerror
在Brwoser(火狐9)被拋出:
頁面加載時與ws:// localhost:8080 / websocket的連接中斷
我還嘗試在WebSocketServerHandler
的channelClosed
方法內發送一個CloseWebSocketFrame
:
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
CloseWebSocketFrame close = new CloseWebSocketFrame();
ctx.getChannel().write(close);
}
這將引發ClosedChannelException
(可能與此有關?)。
您必須這樣做:
ch.write(new CloseWebSocketFrame());
服務器將關閉連接。 如果連接關閉不夠快,則可以調用ch.close()
。
怎么樣
ctx.getChannel().write(new CloseWebSocketFrame()).addListener(ChannelFutureListener.CLOSE);
那應該發送CloseWebSocketFrame,然后在那之后關閉通道。
您使用什么版本?
您是否嘗試過這樣做:
ctx.getChannel().write(ChannelBuffers.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.