首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >患者心脏跳动

患者心脏跳动
EN

Stack Overflow用户
提问于 2014-03-09 17:07:45
回答 1查看 10.9K关注 0票数 3

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

  1. 开式断续连接(发送连接框)
  2. 订阅提要(发送订阅帧)
  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");}

我在这个过程中的问题是

代码语言:javascript
复制
java.net.SocketTimeoutException: Read timed out
 at java.net.SocketInputStream.socketRead0(Native Method)...

我认为这主要是因为我订阅的提要在某些时候给出的信息比较慢(因为我通常在周末、节假日或晚上都会收到这个错误)。

我一直在阅读这个这里,我认为这将有助于解决我的问题。但是,我不太确定如何将它与我的stomp客户端的当前布局相结合。我必须在步骤3内发送一个连接头吗?

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

在stomp 等级库中我们有:

关于心跳本身,通过网络连接接收到的任何新数据都表明远程终端是活动的。在给定的方向上,如果预期心跳每毫秒一次:

  • 发送方必须至少每毫秒通过网络连接发送新数据。
  • 如果发送方没有真正的STOMP帧要发送,它必须发送一个换行符字节(0x0A)。
  • 如果在至少毫秒的时间窗口内,接收方没有接收到任何新的数据,它可以将连接视为死亡。
  • 由于定时不准确,接收方应该宽容,并考虑到误差。

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

EN

回答 1

Stack Overflow用户

发布于 2014-09-15 04:50:37

连接到的stomp服务器由于innactivity已超时连接。

如果服务器支持StompVersion1.1或更高版本,您的客户端最简单的解决方案就是在连接头中包含一个心跳指令,比如"0,10000“。这告诉服务器,您不能发送心跳,但您希望它每10秒发送一次。这样您就不需要实现它们,服务器将通过将它们发送给您来保持连接活动。

当然,服务器将对客户端有自己的需求。在你的评论中,它用"1000,0“来回应你的请求。这意味着它将每1000毫秒发送一次心跳,并期望您每0毫秒发送一次,0表示根本没有。所以你的工作将是最低限度的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22285225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档