我目前的stomp客户端流程的设计如下:
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)...我认为这主要是因为我订阅的提要在某些时候给出的信息比较慢(因为我通常在周末、节假日或晚上都会收到这个错误)。
我一直在阅读这个这里,我认为这将有助于解决我的问题。但是,我不太确定如何将它与我的stomp客户端的当前布局相结合。我必须在步骤3内发送一个连接头吗?
如果这有帮助的话,我目前正在使用activemq创建我的stomp客户端。
在stomp 等级库中我们有:
关于心跳本身,通过网络连接接收到的任何新数据都表明远程终端是活动的。在给定的方向上,如果预期心跳每毫秒一次:
这是否意味着我的客户需要每n秒钟发送一次换行符?
发布于 2014-09-15 04:50:37
连接到的stomp服务器由于innactivity已超时连接。
如果服务器支持StompVersion1.1或更高版本,您的客户端最简单的解决方案就是在连接头中包含一个心跳指令,比如"0,10000“。这告诉服务器,您不能发送心跳,但您希望它每10秒发送一次。这样您就不需要实现它们,服务器将通过将它们发送给您来保持连接活动。
当然,服务器将对客户端有自己的需求。在你的评论中,它用"1000,0“来回应你的请求。这意味着它将每1000毫秒发送一次心跳,并期望您每0毫秒发送一次,0表示根本没有。所以你的工作将是最低限度的。
https://stackoverflow.com/questions/22285225
复制相似问题