gpt4 book ai didi

java - STOMP 客户端中的心跳

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:42 35 4
gpt4 key购买 nike

我目前的stomp客户端流程设计如下:

  1. 打开stomp连接(发送CONNECT帧)
  2. 订阅提要(发送 SUBSCRIBE 帧)
  3. 做一个循环以持续接收提要:
while (true) {
connection.begin("txt1");

StompFrame message = connection.receive();
System.out.println("message get header"+message.toString());
LOG.info(message.getBody());

connection.ack(message, "txt1");

connection.commit("txt1");

}

这个过程的问题是我得到了

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)...

我认为这主要是因为我订阅的提要在某些时候提供信息的速度较慢(因为我通常会在周末、假期或晚上出现此错误)。

我一直在阅读这个 here我认为这将有助于解决我的问题。但是,我不太确定如何将它与我的 stomp 客户端的当前布局结合起来。我是否必须在第 3 步中发送 CONNECT header ?

如果有帮助,我目前正在使用 activemq 创建我的 stomp 客户端。

踩踏spec我们有:

Regarding the heart-beats themselves, any new data received over the network connection is an indication that the remote end is alive. In a given direction, if heart-beats are expected every milliseconds:

  • the sender MUST send new data over the network connection at least every milliseconds
  • if the sender has no real STOMP frame to send, it MUST send a single newline byte (0x0A)
  • if, inside a time window of at least milliseconds, the receiver did not receive any new data, it CAN consider the connection as dead
  • because of timing inaccuracies, the receiver SHOULD be tolerant and take into account an error margin

这是否意味着我的客户需要每 n 秒发送一个换行符?

最佳答案

您所连接的 stomp 服务器由于不活动而使您的连接超时。

如果服务器支持 Stomp 版本 1.1 或更新版本,对您的客户端来说最简单的解决方案是在 CONNECT 的 header 中包含心跳指令,例如“0,10000”。这告诉服务器您不能发送心跳,但您希望它每 10 秒发送一次。这样您就不需要实现它们,服务器将通过将它们发送给您来保持连接处于 Activity 状态。

当然服务器端会有自己对客户端的要求。在您的评论中,它以“1000,0”响应您的请求。这表明它将每 1000 毫秒发送一次心跳,它希望您每 0 毫秒发送一次,0 表示根本没有。所以你的工作将是最少的。

关于java - STOMP 客户端中的心跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22285225/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com