SockJS从spring websocket接收到乱码消息

问题描述 投票:9回答:4

我正在尝试使用Springframework SimpMessagingTemplate(默认的Stomp实现)流式传输时间序列数据,以将消息广播到SockJS客户端订阅的主题。但是,消息被乱序接收。服务器是单线程,并且消息按其时间戳按升序发送。客户端以某种方式接收到消息的顺序错误。

我正在使用stompjs和springframework的最新发行版(4.1.6发行版。)>

我正在尝试使用Springframework SimpMessagingTemplate(默认的Stomp实现)流式传输时间序列数据,以将消息广播到SockJS客户端订阅的主题。但是,...

stomp sockjs spring-websocket
4个回答
11
投票

找到了此问题的根本原因。从应用程序实现的角度来看,消息以“正确”的顺序发送(即,以一个线程或至少线程安全的方式调用convertAndSend()。)但是,Springframework Web套接字使用react-tcp实现,它将在以下位置处理消息:来自线程池的clientOutboundChannel。因此,可以按照到达消息的不同顺序将消息写入tcp套接字。当我将Web套接字配置为clientOutboundChannel限制1个线程时,将保留该顺序。

这个问题不在SocketJS中,而是当前Spring Web套接字设计的局限性。


8
投票

这是Spring Web套接字设计问题。要以有效顺序接收消息,您必须将websocket客户端的corePoolSize设置为1。


7
投票

似乎有一个内置的带区执行器,因此只需启用它:


4
投票

UPDATE

© www.soinside.com 2019 - 2024. All rights reserved.