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