给定一个使用CometD的Java web应用程序,如何在bayeux每次处理消息时向通道的所有订阅者发布消息?
对于测试,我使用serverSession.deliver(serverSession, "/test-channel", map, null);
。
结果是我的Javascript客户端将成功订阅,但是每10次尝试中只接收1次消息。因此,90%的情况下,浏览器不会接收到任何消息,但Bayeux日志记录(级别3)显示它们每次都被发送到正确的通道。
我应该使用某种形式的客户端会话吗?CometD文档似乎有点不清楚使用localSession
似乎是答案。我实现这个来修复:
ClientSessionChannel channel = localSession.getChannel(getClientChannel());
channel.publish(map);
客户端现在正在接收所有消息