我正在使用Primefaces Websocket功能;它是使用Atmosphere框架实现的。
我在webapp中定义了两个servlet:第一个用于前端(我使用Primefaces和websocket功能),第二个用于API功能(我使用的是Jersey和JAXRS功能)
我需要做的是:当请求发布到资源(使用API servlet)时,我需要使用websockets向所有连接的客户端发送消息。
在第二个servlet上,在拦截发布请求的方法内部,我尝试了这个解决方案:
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish("subscriber/*", "This message is for all connected clients, through websockets");
它不起作用,似乎EventBus
实例提供程序EventBusFactory
与所有用户连接的实例提供程序不同。该消息未被广播。
怎么可能?
如果我尝试从第一个servlet广播消息,客户端使用websockets的消息也一样,都可以正常工作。
答案 0 :(得分:1)
我已经解决了这个问题。 只需使用
EventBus eventBus = EventBusFactory.getDefault().eventBus();
eventBus.publish("subscriber/*", "This message is for all connected clients, through websockets");
第二个servlet上的和EventBus
将被解析。
我提交了语法错误,因此第二个servlet没有正确解析EventBus
。
因此,在我的情况"subscriber/*"
中,请小心编写正确的订阅者主题,以拦截在第三方servlet中创建的所有端点。