大气Grails单用户广播

大气Grails单用户广播,grails,grails-plugin,atmosphere,Grails,Grails Plugin,Atmosphere,我正在创建一个Grails应用程序,它利用Atmosphere插件将数据推送到浏览器。但是,我在为单个用户(会话的用户)创建广播频道时遇到了问题。我的代码如下: 服务: static atmosphere = [mapping: '/atmosphere/recommend'] def onRequest = { event -> def request = event.request def response = event.response event.su

我正在创建一个Grails应用程序,它利用Atmosphere插件将数据推送到浏览器。但是,我在为单个用户(会话的用户)创建广播频道时遇到了问题。我的代码如下:

服务:

static atmosphere = [mapping: '/atmosphere/recommend']

def onRequest = { event ->
    def request = event.request
    def response = event.response

    event.suspend()     

    def broadcaster = event.broadcaster
    request.session.broadcaster = broadcaster
    broadcaster.broadcasterConfig.addFilter(new XSSHtmlFilter())     
}

def onStateChange = { event ->

    if (!event.message) return

    event.resource.response.writer.with {
        write "<script>parent.callback('${event.message}');</script>"
        flush()
    }
}
此解决方案将jsonResult广播给每个用户。我想要实现的是只为当前用户广播。 有什么想法吗? 如果你需要更多的细节,请告诉我


谢谢

我认为您可以使用会话来共享onRequest的事件

request.session[userId]=event
然后在控制器中:

broadcast(jsonResult,session[userId])

在grails中定义事件时,可以使用browserFilter闭包过滤掉cient

嘿,您可以使用分配给每个大气资源的
uuid
。 要根据大气请求检索挂起的uuid,可以执行以下操作:

String suspendeduid=(String)req.getAttribute(ApplicationConfig.SUSPENDED\u ATMOSPHERE\u RESOURCE\u UUID);

您可以通过该会话

session.broadcaster.broadcast(jsonResult, AtmosphereResource)
看这个


(我是大气的创造者)。

看起来这和你想要的相似吗?
session.broadcaster.broadcast(jsonResult, AtmosphereResource)