2016-11-08 1 views
0

Мне нужно сделать мой websocket, чтобы закрыть изящно. Сначала отправьте все сообщения, ожидающие в буфере, затем закройте.Netty websocket закрыть изящно

channel.flush(); 
channel.close(); 

, кажется, не правильно, потому что я не имею никакого обработчика завершения для промывки способ сделать близко после того, как это делается.

Есть ли способ сделать это. Netty used: 4.1.0.Beta3

ответ

2

Уловка, которую вы можете использовать, заключается в том, чтобы написатьAndFlush пустой буфер, а затем прикрепить прослушиватель к этому вызову. Unpooled.EMPTY_BUFFER может сделать это довольно легко.

channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(... 
    channel.close(); 
)}; 

Если все, что вам нужно сделать, это закрыть канал после промывки, то вы можете использовать ChannelFutureListener.CLOSE для упрощения кода.

channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE); 

Если вы делаете это достаточно часто, то вы можете написать статический вспомогательный метод like the Netty examples do.

Смежные вопросы