Grails大气插件向不同的客户端广播

Grails大气插件向不同的客户端广播,grails,atmosphere,Grails,Atmosphere,我试图扩展Groovy Mag Atmosphere示例()以向不同的客户机广播。(如中所示) 客户端与url连接。将向服务器传递一个id。新添加的lookupBroadcaster方法创建了一个id为的新广播对象。当我想要广播消息时,客户端不会收到结果 有人能帮我试试吗 我将大气0.8.2库添加到BuildConfig.groovy中,以使用像“/atmosphere/messages/*”这样的映射 dependencies { runtime 'org.atmosphere:a

我试图扩展Groovy Mag Atmosphere示例()以向不同的客户机广播。(如中所示)

客户端与url连接。将向服务器传递一个id。新添加的lookupBroadcaster方法创建了一个id为的新广播对象。当我想要广播消息时,客户端不会收到结果

有人能帮我试试吗

我将大气0.8.2库添加到BuildConfig.groovy中,以使用像“/atmosphere/messages/*”这样的映射

dependencies {  
    runtime 'org.atmosphere:atmosphere-runtime:0.8.2'
}


class AtmosphereService {

static transactional = false

static atmosphere = [mapping: '/atmosphere/messages/*']

static exposes = ['jms']

@Subscriber(topic='msgevent')
def onEvent(msg) {
    println 'onevent'
    def payload = msg
    if(msg instanceof Map) {
        // convert map messages to JSON
        payload = msg.encodeAsJSON()
    }

    Broadcaster b = lookupBroadcaster(msg["id"], false);
    b.broadcast(payload)

    return null
}

Broadcaster lookupBroadcaster(String id, Boolean createBroadcast) {
    return BroadcasterFactory.getDefault().lookup(id, createBroadcast)
}

def onRequest = { event ->

    def req = event.request
    def id = req.getParameter("id")

    Broadcaster b = lookupBroadcaster(id, true);
    event.setBroadcaster(b);
    b.addAtmosphereResource(event)

    event.suspend()

}

def onStateChange = { event ->
    if (event.message) {
        log.info "onStateChange, message: ${event.message}"

        if (event.isSuspended()) {
            event.resource.response.writer.with {
                write "<script>parent.callback('${event.message}');</script>"
                flush()
            }
            event.resume()
        }
    }
}
依赖项{
运行时“org.atmosphere:atmosphere运行时:0.8.2”
}
类大气服务{
静态事务=false
静态大气=[映射:'/atmosphere/messages/*']
静态公开=['jms']
@订户(topic='msgevent')
def onEvent(味精){
打印“OneEvent”
def有效负载=msg
if(msg instanceof Map){
//将映射消息转换为JSON
有效负载=msg.encodeAsJSON()
}
广播者b=lookupBroadcaster(消息[“id”],假);
b、 广播(有效载荷)
返回空
}
广播器lookupBroadcaster(字符串id,布尔值CreateBroadcaster){
返回BroadcasterFactory.getDefault().lookup(id,createBroadcast)
}
def onRequest={event->
def req=event.request
def id=req.getParameter(“id”)
广播者b=lookupBroadcaster(id,true);
事件。广播员(b);
b、 addAtmosphereResource(事件)
event.suspend()
}
def onStateChange={event->
if(event.message){
log.info“onStateChange,message:${event.message}”
if(event.issuspendend()){
event.resource.response.writer.with{
写“parent.callback('${event.message}')
刷新()
}
event.resume()
}
}
}
}敬礼

这应该基于该代码段工作。广播时是否调用onStateChange()方法?由于您正在恢复,第一次广播将正常工作,但此后AtmosphereResource将从其关联的广播机中删除,因此不再进行更新

谢谢

--Jeanfrancois