【问题标题】:How netty manage the health of Socketnetty 如何管理 Socket 的健康
【发布时间】:2014-03-20 05:53:44
【问题描述】:

我是 Java Socket 编程和 Netty 的初学者。目前,我们有一个使用纯 Java 套接字连接的应用程序,我们自己管理套接字的健康状况。

我想了解 netty 是如何管理套接字的? 端口将开放多长时间? 如果套接字连接断开会发生什么? Netty 是如何维护 tcp 会话的?

【问题讨论】:

    标签: java sockets netty


    【解决方案1】:

    Netty 在管理底层 tcp 套接字细节方面是完全透明的。

    端口将开放多长时间?

    Netty 允许您在通道上设置 SO_TIMEOUT - 这基本上是一个 tcp 属性,它会引发读取超时警报,您可以编写代码来对此做出响应并根据需要断开连接。

    ChannelOptions

    如果socket连接断开会发生什么?

    如果您使用 SimpleChannelUpstreamHandler ,则将调用其 channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e)

    SimpleChannelUpstreamHandler

    Netty 是如何维护 tcp 会话的?

    不确定你的意思,但它基本上与 a tcp 协议中使用的机制相同。

    【讨论】:

    • SO_TIMEOUT 是读取超时。它不会导致连接断开,而且 Netty 无论如何都不会观察到它,因为它处于非阻塞模式。
    • @EJP - 更正了自己。感谢您指出。如果想用 Netty 也有阻塞模式。
    • SO_TIMEOUT 仅适用于 OIO 传输,Netty 不会因此而关闭连接或引发任何异常或警报。
    • @trustin - 是的,我也指的是 OIO(因为 NIO 是非阻塞的)。如果 SO_TIMEOUT 上没有警报,允许在频道上设置此选项有什么意义?
    • 较短的 SO_TIMEOUT 是,较短的持续时间它将等待每个InputStream.read()。这是 OIO 的一个重要调整参数,因为如果 recv 缓冲区中没有任何内容,InputStream.read() 将阻塞。默认为 1 秒,这意味着InputStream.read() 最多会等待 1 秒,直到它检查其任务队列。
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2013-04-01
    • 2015-04-06
    • 1970-01-01
    • 2020-10-30
    • 2022-06-13
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多