首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmosphere单用户广播

Atmosphere单用户广播
EN

Stack Overflow用户
提问于 2011-07-29 20:31:53
回答 4查看 954关注 0票数 1

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

服务:

代码语言:javascript
复制
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()
    }
}

控制器:

代码语言:javascript
复制
def builder = new JSONBuilder()
    def jsonResult = builder.build{
                            artist = artistInstance
                            location = {
                                lat = eventInstance.location.lat
                                lng = eventInstance.location.lng
                            }
                        }

session.broadcaster.broadcast(jsonResult)

此解决方案将jsonResult广播给每个用户。我想要实现的是只为当前用户广播。有什么想法吗?如果您需要更多细节,请让我知道。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2011-09-09 16:13:58

我认为你可以使用session来分享onRequest的事件。

代码语言:javascript
复制
request.session[userId]=event

然后在控制器中:

代码语言:javascript
复制
broadcast(jsonResult,session[userId])
票数 0
EN

Stack Overflow用户

发布于 2013-05-17 02:34:05

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

票数 0
EN

Stack Overflow用户

发布于 2013-09-23 00:53:10

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

String suspendedUUID = (String)req.getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6873110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档