Grails大气漏接

Grails大气漏接,grails,atmosphere,Grails,Atmosphere,我曾经检查过atmosphere的工作原理,并对其进行了一些修改:添加发送消息的服务: def sendMessage(String message){ String mapping = "/jabber/chat/12345" Broadcaster b = BroadcasterFactory.getDefault().lookup(DefaultBroadcaster.class, mapping) println("Broadcast re

我曾经检查过atmosphere的工作原理,并对其进行了一些修改:添加发送消息的服务:

def sendMessage(String message){
        String mapping = "/jabber/chat/12345"
        Broadcaster b = BroadcasterFactory.getDefault().lookup(DefaultBroadcaster.class, mapping)
        println("Broadcast resources size:" +b.getAtmosphereResources().size())
        def resp = [type: "chat", resource: mapping, message: message] as JSON
        b.broadcast(resp)
    }

但看起来,当我调用函数时,我在广播中的连接的AtmosphereResource丢失,客户端没有收到消息。有人知道问题出在哪里吗?谢谢您的帮助。

首先,您使用的是什么传输协议

如果是“长轮询”(默认)或“轮询”,则在未发送或接收任何消息(或事件)的情况下,尝试在5分钟(默认)后重新连接

也许其中一个重新连接是场

我有一些类似的问题,系统只重新连接了5次。因此,在5x5分钟后,客户端和服务器之间没有连接。 检查浏览器日志/已建立的连接,查看您的浏览器是否具有到服务器的有效连接。
还可以尝试使用atmosphere(将timeoutconf的值减少到10000,并尝试重现问题)。

经过一些调试后,切换到SimpleBroadcaster实现,现在代码运行得很好:
处理程序类

@Override
    void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String mapping = "/jabber/chat" + request.getPathInfo()
        Broadcaster b = BroadcasterFactory.getDefault().lookup(SimpleBroadcaster.class, mapping, true)
        Meteor m = Meteor.build(request)
        m.setBroadcaster(b)
    }
服务

def sendMessage(String message){
        String mapping = "/jabber/chat/12345"
        Broadcaster b = BroadcasterFactory.getDefault().lookup(mapping)
        println("Broadcast resources size:" +b.getAtmosphereResources().size())
        def resp = [type: "chat", resource: mapping, message: message] as JSON
        b.broadcast(resp)
    }