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