Grails Atmosphere错过了连接

时间:2014-02-04 13:05:46

标签: grails atmosphere

我已经使用the sample检查大气的工作原理并对其进行了一些修改:添加服务以发送消息:

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用于我在广播公司的连接时,错过了客户端没有收到消息。有谁知道问题是什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

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

如果是'长轮询'(默认)或'轮询'气氛,请在5分钟后重新连接(默认),如果没有发送或接收任何消息(或事件)。

也许其中一个重新连接是字段?

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

答案 1 :(得分:0)

经过一些调试切换到 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)
    }