如何在整个“会话”中保持 Netty NIODatagram 通道打开

Posted

技术标签:

【中文标题】如何在整个“会话”中保持 Netty NIODatagram 通道打开【英文标题】:How can I keep Netty NIODatagram channels open throughout a "session" 【发布时间】:2020-08-27 01:41:58 【问题描述】:

我正在尝试将 Mina 项目转换为使用 Netty,并且在尝试提出适当的代码进行建模时遇到了困难。

我的 NioDatagram 客户端必须在虚拟“会话”期间与服务器交换多个身份验证数据包。我正在尝试重用频道并避免频道创建和拆除的开销。

我遇到的为数不多的 NioDatagram 示例中的大多数都是玩具。他们发送一个数据包做很多事情,比如:

try 
    handleRxDatagram(ctx, packet);
 finally 
    **ctx.close();**
 

ch.writeAndFlush(new DatagramPacket(bbuf, toAddress)).sync();
boolean succ = ch.closeFuture().await(10, TimeUnit.SECONDS);
if (!succ) 
    System.err.println("query timeout!");
    **ch.close().sync();**
                         

无论我尝试什么,我要么结束数据包要么不发送,要么不接收。

毫无疑问,我的很多问题都是由于我对 Netty 的无知和不熟悉造成的,但是 NIO UDP 似乎是 Netty 项目的可怜的典型代表。应该不会这么难。

【问题讨论】:

【参考方案1】:

我不确定您到底要什么....除了您写和接收DatagramPacket 之外,它与SocketChannel 没有什么不同。如果您不想关闭DatagramChannel,请不要关闭它。

【讨论】:

感谢公认专家的快速反应。你能指出一些重要的例子吗?

以上是关于如何在整个“会话”中保持 Netty NIODatagram 通道打开的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Security 中使用 Oauth2 手动进行身份验证不会在整个会话期间保持 SecurityContext

在我单击注销按钮之前,如何在 php 中保持会话? [复制]

如何在phoneGap中保持会话

如何快速保持会话

如何使用 django 保持 tensorflow 会话在内存中运行

在 Firebase 中退出应用程序后如何保持用户会话