我用的是Netty 3.9
我有一个客户场景,我必须按照这个顺序进行操作
由于连接和断开连接是一项成本高昂的操作,我希望尽可能多地重用Netty级别的对象。
所以我做以下事情
ClientBootStrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory);
bootstrap.setPipelineFactory(new MyPipeLineFactory());
// set options : soLinger, keepAlive, tcpNoDelay,
ChannelFuture f = bootstrap.connect(remoteAddr,localAddr);
f.awaitUninterruptibly();
Channel ch = f.getChannel();
// use the Channel, send/recv message
// disconnect the channel
ch.disconnect().awaitUninterruptibly();
// save the 'ch' in a map
// Now reuse the same Channel Object
// retreive 'ch'
ch.connect(remoteAddr)
上面的代码生成了java.nio.channels。ClosedChannel异常,可能是因为套接字已关闭。但是Netty中没有api,我可以使用它断开与服务器的连接,并且仍然保留套接字,以便通过再次连接将其重新用于相同的远程地址。
是否可以以这种方式重用Netty频道?如果是,如何?我需要在bootsrtap中设置任何选项吗?
在Netty 3中断开连接后,通道将关闭并且无法重新打开。您必须创建一个新的。
另一种选择是保持连接打开(不要忘记有一个keepalive机制),同时从协议的角度来看实际上是关闭的,因此实现了一种连接池。
我正在开发一个与许多客户端连接的服务器。我需要知道客户端何时与服务器断开连接。因此,每个客户端都向服务器发送一个特定的字符。如果两秒钟后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。 这是我的服务器的主要代码: 第一个问题是,我用来识别在线客户端的方式(每秒发送特定消息)是否是一种好方法? 如果它是好的,我如何使用检测与女巫客户端相关,然后如何断开密钥与服务器的连接
我正在用Java编写一个简单的TCP客户机/服务器程序对,如果客户机在10秒内还没有发送任何东西,服务器必须断开连接。socket.setsoTimeout()使我得到了这一点,服务器就可以很好地断开连接。问题是--我如何让客户端确定服务器是否关闭?目前,我使用DataOutputStream向服务器写入数据,这里的一些答案表明,向封闭套接字写入数据将引发IOException,但这不会发生。 编
我正在制作满足以下条件的Netty服务器: null 在我的情况下,既没有发生“通道不活动”事件,也没有发生“连接被对等方重置”异常。 这是我使用的Netty测试客户端代码的部分。 如何在要回复时注意到断开连接?
问题内容: 我有一个RMI服务器和一个桌面RMI客户端。重新启动服务器时,客户端出现错误。是否可以在不重新启动客户端的情况下重新启动RMI连接? [编辑]这是堆栈跟踪: 问题答案: 服务器终止后,您将收到一个ConnectException。之后,您可以使用Naming.lookup获取新的服务器对象。
问题内容: 我使用和创建一个实时Web应用程序。我将为用户提供对套接字连接的完全控制,例如手动断开连接和(重新)连接。 在客户端启动时,该功能可以正常运行,但是在使用之后,不会启动新连接。 问题答案: 现在可以使用socket.socket.reconnect() 相关:https : //github.com/LearnBoost/socket.io- client/issues/251
我试图了解服务器-客户端网络如何为实时多人游戏工作。 假设我正在构建一个实时多人游戏,比如FPS。 如果玩家A向玩家B开枪,后端< code >服务器需要告诉玩家B他们被击中了。 我知道如何让玩家 A 告诉后端服务器他开了一枪,只是向服务器发送请求,但是如何让后端告诉玩家 他们被枪杀了? 玩家B是否必须每0.1秒检查一次后端以查看是否发生了什么事情,或者是否有更有效的方法?