我正在使用Atmosphere Framework 2.0.8。
我已在我的应用程序中实现了AtmosphereHandler,并通过WebSockets和Long Polling正确地进行了双向通信。
我正在尝试添加一些处理代码,以便在客户端断开连接以清理特定于该客户端的某些资源时(例如,我在要移除的表中有一个条目)。
我已阅读以下维基条目:
OnDisconnect技巧:https://github.com/Atmosphere/atmosphere/wiki/onDisconnect-tricks 配置Atmosphere Listener:https://github.com/Atmosphere/atmosphere/wiki/Configuring-Atmosphere-Listener
我不清楚的是我应该将呼叫添加到
atmosphereResource.addEventListener( new AtmosphereResourceEventListenerAdapter() {} );
我最终在JavaDoc中为AtmosphereHandler找到了一些示例代码,它在onRequest()方法中注册了EventListener。 http://atmosphere.github.io/atmosphere/apidocs/org/atmosphere/cpr/AtmosphereHandler.html
我想知道的是,这是正确的方法吗?
据我了解,AtmosphereResource表示客户端与服务器之间在该连接生命周期内的连接。通过来自同一客户端的onRequest()方法,uuid在多个调用上保持对象的一致性。因此,每次调用onRequest方法时,相同的AtmosphereResource对象都会添加EventListener。
这似乎不对。这会导致为每个AtmosphereResource注册数以千计的EventListener吗?
似乎只能为每个AtmosphereResource注册一次EventLister。
我觉得我在这里缺少一些基本的东西。有人可以解释一下吗?
答案 0 :(得分:3)
这里使用example MeteorServlet,所以它看起来不像你必须要做的那样,但它应该让你开始。我将监听器添加到Meteor
实例,然后您将其添加到AtmosphereResource
。每个资源只有一个监听器。
重写的onDisconnect()
方法调用处理事件的this Grails service method。当然,您将要调用清理数据库资源的内容。
请注意,使用these options配置servlet。我想你可能需要org.atmosphere.interceptor.HeartbeatInterceptor
,但是自从我最初设置它以来已经很久了,我不记得是否有必要。