当前位置: 首页 > 知识库问答 >
问题:

网络和 TCP - 如何正确发送空消息

戚阳
2023-03-14

我们在用Netty编写的AWS Network ELB(类似于具有长期连接的Echo服务器)后面有一个简单的TCP服务器,我正在尝试实现一个类似于TCP keep alive机制的keep live机制,以保持空闲连接打开。不幸的是,我们不能依赖TCP保持活动机制,因为NELB不会将保持活动的TCP数据包转发到负载平衡器的另一端
我想做的是监视空闲连接,并向客户端发送一个空字符串(空字节数组)。到目前为止,我在代码中所做的是:

  1. 添加带有一些超时值的IdleStateHandler
  2. 注册一个GprsKeepAliveHandler,ChannelDuplexHandler的子类,覆盖用户事件触发方法发送(ctx.writeAndFlush)的Unpooled.EMPTY_BUFFER

这样,如果连接消失,我希望收到RST数据包。否则,连接将再次变为活动状态。

问题是Netty没有对空消息做任何事情,它没有向客户端发送任何数据包(由Wireshark监控)。如果我将消息更改为< code > un pooled . wrapped buffer(new byte[]{ 0 }),我会看到我期望看到的内容。

问题

    < li >我找不到更好的方法来实现我的目标(保持连接活动并检测死连接)。如果有更好的方法,请告诉我。 < li >在Netty中发送空消息的正确方式是什么?(我看到了这个问题,但没有帮助) < li >如果问题是由于操作系统TCP堆栈行为引起的,是否有办法解决此问题?

共有2个答案

谈秦斩
2023-03-14

似乎Netty在空消息的情况下不会进行任何系统调用。(见此)

惠翰藻
2023-03-14

从我的角度来看,你需要发送一些有意义的东西,因为你试图做(例如乒乓球/乒乓球,心跳行为)。另请参阅是否可以强制TCP套接字在数据包丢失的情况下发送0字节 - python

 类似资料:
  • 虽然之前我们已经提到过不建议直接使用 LogStash::Inputs::TCP 和 LogStash::Outputs::TCP 做转发工作,不过在实际交流中,发现确实有不少朋友觉得这种简单配置足够使用,因而不愿意多加一层消息队列的。所以,还是把 Logstash 如何直接发送 TCP 数据也稍微提点一下。 配置示例 output { tcp { host => "19

  • 我正在创建客户端-服务器系统,应该能够在稳定的网络工作。它假设连接可能会在某一时间中断,然后系统必须重新连接并继续其工作。我正在使用Netty,遇到了一个问题:我们如何知道我们发送的消息被另一台主机收到了? 我在想,为此目的,可以使用ChannelFuture,如果它在附加的未来侦听器中失败,我可以简单地尝试再次发送消息: 但是当我这样做时,我注意到,侦听器从不打印错误。(我通过在系统几乎不工作时

  • 问题内容: 我正在使用Java开发RESTful Web服务。如果出现问题,我需要一种将错误消息发送给客户端的好方法。 根据Javadoc的规定, “由于message参数含义不明确 ,因此不建议使用 ”。 有没有设置状态消息或响应的“ 原因短语 ”的首选方法?该方法不这样做。 编辑:为了澄清,我想修改HTTP状态行,即不是主体内容。具体来说,我想发送类似的回复。 问题答案: 我认为任何RESTf

  • > 构造函数接受InetSocketAddress和actorref。InetSocketAddress是有意义的(我假设这是目的地),但是actorref是什么?这是我第一次使用akka,但据我了解,ActorRef是另一个演员的引用。既然我的TCP客户端是一个参与者,并且我希望这个TCP参与者与TCP服务器通信,而不是与另一个参与者通信,为什么我要给它一个参与者引用? 伙伴对象中的道具功能是用

  • 我正在构建一个使用UDP协议向客户端发送和接收UDP消息的服务器。客户端不断地“抛出”UDP消息到服务器,而服务器没有任何响应,当服务器“认为”它已经从某些客户端接收到足够的UDP消息时,它将发送一个信号消息(UDP消息)返回给客户端(这一次,客户端充当服务器),以防止它发送更多的消息。这里的问题是:服务器可以从客户端接收UDP消息。但是客户端(位于LAN网络后面)不能从服务器接收UDP消息。我如

  • 在过去的几个小时里,我一直在阅读推送通知应用编程接口和网络通知应用编程接口。我还发现谷歌 我试图了解我们是否可以使用桌面通知实现对浏览器的推送通知,我相信这就是Web通知API所做的。我在这里看到了一个关于如何为Chrome做到这一点的谷歌文档 现在我还不明白的是: 我们可以使用GCM/APNS向包括Firefox在内的所有Web浏览器发送推送通知吗 我相信所有这些答案都可以帮助很多有类似困惑的人