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

网络套接字上STOMP的延迟

班宏毅
2023-03-14

我用的是SpringMVC 4 Tomcat。我的应用程序用@ Autowired SimpMessagingTemplate得到了2个类(A和B)。每个类都有一个调用“convertAndSend”的线程。

A类发送一条由8个双字段和3个长字段组成的消息。它向大约500个主题发送消息,例如“/主题/价格. X”(其中X-一些随机字符串)。频率-在单个循环中每秒最多4次(每个主题)。

B 类发送一条消息,该消息由 8 个双精度字段、4 个长字段和 4 个字符串字段组成。它将消息发送到单个主题,如“/主题/dma事件”。频率 - 每秒几次(最多20次)。

对于我的应用程序来说,保持消息顺序非常重要,因此我应用了这里描述的解决方案:

SockJS收到来自Spring网站盗贼的踩踏消息

@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
     registration.taskExecutor().corePoolSize(1);
}

我们有大约10-20个客户端同时连接并订阅所有主题。客户端应用程序。Net使用“websocket-sharp”库和自定义的STOMP协议实现。服务器在纽约,客户在芝加哥和伦敦。

在我们的UAT环境中一切正常,但在产品中,一位用户抱怨以下问题:

    < li >在某些情况下,来自B类的消息传送到客户端会有大约30-40秒的延迟。同时,来自A类的消息被无延迟地传送。当来自类别A的消息以最大频率发送时(每个主题每秒4次=每秒2000条消息),会出现这种情况。当频率降低时,延迟消失。

我用equenceId标记了每条消息,并注意到来自ClassB的消息无论如何都以错误的顺序传递。例如,服务器发送:

  • 消息1 -

客户收到:

  • 消息1 -

问题1:这是一种预期行为吗?

问题2:延迟的原因是什么?我是否应该放弃registration.taskExecutor(). corePoolSize(1)的解决方案;并实现一个逻辑来保护客户端的消息顺序?

谢谢你。

共有1个答案

阎冠玉
2023-03-14

我遇到了类似的问题,STOMP消息的延迟/缓慢传递,结果证明是由Spring使用的Reactor库引起的。

更新到更高版本后,为我修复了它:

runtime("io.projectreactor:reactor-core:2.0.6.RELEASE")
runtime("io.projectreactor:reactor-net:2.0.6.RELEASE")
runtime("io.netty:netty-all:4.0.33.Final")
 类似资料:
  • 计算机网络基础 ip地址 为了使网络上的计算机能够彼此识别对方,每台计算机都需要一个IP地址以标识自己。 IPv4:32位,IPv6:64位 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 地址解析 地址解析是指将计算机的协议地址解析为物理地址,即MAC(Medium Access Control)地址,又称为媒体访问控制地址。通常,在网络上由地址解析协议(ARP)

  • 我写了一个简单的udp服务器客户端应用程序与多播套接字。服务器每6毫秒向三个客户端发送数据包。数据包大小为1200字节。这是每秒166,66个数据包。每当其中一个客户端检测到丢失的数据包时,它将通过单播向服务器发送NACK数据包。 第一个测试:服务器和三个客户端通过以太网连接到路由器TP链路TL-WDR4300(dd wrt),一切正常。 第二次测试:只有服务器通过以太网连接到路由器,其他客户端通

  • 函数 描述 [[socket socket]] 创建一个套接字描述符 [[socketpair socketpair]] 创建一个套接字偶对 [[shutdown shutdown]] 断开套接字连接 [[close close]] 销毁套接字 套接字选项 函数 描述 [[getsockopt sockopt]] [[setsockopt sockopt]] 适用于流式套接字和数据报套接字 流套接

  • 套接字地址结构 地址结构 说明 sockaddr_un UNIX通信域套接字地址 sockaddr_in IPv4套接字地址 sockaddr_in6 IPv6套接字地址 sockddr_un struct sockaddr_un { sa_familly_t sun_family; char sun_path[]; } sockaddr_in /* 在头文件<netinet/in

  • 问题内容: 我正在尝试使用nodejs创建类似聊天的内容。我是nodejs的新手,我想在没有socket.io的情况下创建它(我想了解它的工作原理)。这是我正在使用的代码。 而且一切正常,(我认为)。当我打开localhost:7000时,我收到有关“ CONNECTED TO:”和“ connected”以及“ I am Chack Norris”的节点CMD消息。之后,我尝试在浏览器控制台中编

  • 错误:在object.exports._errnoException(util.js:856:11)在exports._exceptionWithHostPort(util.js:879:20)在tcpConnectTRap.AfterConnect[as oncomplete](net.js:1063:14)vivek@vivek-latitude-e6220://var/www/html/te