我有spring + SockJS应用程序,即使用ActiveMQ作为消息代理。
我可以在同一个JSP页面上有两个套接字,一个用于发送和接收,另一个用于接收stomp消息(流量很大)。它保证所有消息都将从两个套接字传递和接收?
此致 马尔科
答案 0 :(得分:0)
连接时,是的。如果您在任何时候丢失连接,您将在断开连接和重新连接之间丢失所有内容。 A related discussion of this issue得出了这个结论。
请记住,SockJS可能会在不同的客户端上产生不同的连接类型,例如websocket,xhr,xdr等。在任何连接上,SockJS仍将使用TCP并仍然保证按顺序交付。但是,非websocket连接可能需要更长的时间来触发关闭事件,因此您将在客户端处有更长的停电期。几乎任何服务都需要担心这一点,因为SockJS有时会无法连接websocket并“降级”到xhr(根据我在高瞬时负载下的经验)。
一个好的模式是在close事件处理程序中添加重新连接。即使无法建立连接,也会触发关闭偶数,这意味着您需要重新连接时的退避延迟,以防止服务器上出现自我DDoS。另外,我添加顺序数据包编号,并将检测到丢失数据包的任何客户端视为延迟加入者。 (见related ZMQ discussion on late joiners。)您的申请需求可能会有所不同。