【发布时间】:2014-03-20 05:53:44
【问题描述】:
我是 Java Socket 编程和 Netty 的初学者。目前,我们有一个使用纯 Java 套接字连接的应用程序,我们自己管理套接字的健康状况。
我想了解 netty 是如何管理套接字的? 端口将开放多长时间? 如果套接字连接断开会发生什么? Netty 是如何维护 tcp 会话的?
【问题讨论】:
我是 Java Socket 编程和 Netty 的初学者。目前,我们有一个使用纯 Java 套接字连接的应用程序,我们自己管理套接字的健康状况。
我想了解 netty 是如何管理套接字的? 端口将开放多长时间? 如果套接字连接断开会发生什么? Netty 是如何维护 tcp 会话的?
【问题讨论】:
Netty 在管理底层 tcp 套接字细节方面是完全透明的。
端口将开放多长时间?
Netty 允许您在通道上设置 SO_TIMEOUT - 这基本上是一个 tcp 属性,它会引发读取超时警报,您可以编写代码来对此做出响应并根据需要断开连接。
如果socket连接断开会发生什么?
如果您使用 SimpleChannelUpstreamHandler ,则将调用其 channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e)。
Netty 是如何维护 tcp 会话的?
不确定你的意思,但它基本上与 a tcp 协议中使用的机制相同。
【讨论】:
InputStream.read()。这是 OIO 的一个重要调整参数,因为如果 recv 缓冲区中没有任何内容,InputStream.read() 将阻塞。默认为 1 秒,这意味着InputStream.read() 最多会等待 1 秒,直到它检查其任务队列。