【问题标题】:Grails Events Push plugin not getting a response from server eventGrails 事件推送插件没有得到服务器事件的响应
【发布时间】:2013-02-18 18:34:18
【问题描述】:

我一直试图让 grails 事件推送插件工作,但在调用 savedToDo 事件时似乎无法从服务器获取响应数据。我可以在控制台中看到到达服务器并执行服务代码的数据的日志,但客户端似乎没有得到响应。我的代码如下:

MyService.groovy

package eventspush

import grails.converters.JSON

import grails.events.*

class MyService {

   //will receive client events from 'saveTodo' topic
    @Listener(namespace='browser') 
    def saveTodo(Map data){
        log.info(data)
        data.moreData = "There we go...."
        event('savedTodo', data) // will trigger registered browsers on 'savedTodo' topic
    }
}

conf/MyEvents.groovy

events = {
    "savedTodo"  browser: true, browserFilter: { message, request ->    
     return true
  }
}

index.gsp

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <r:require modules="grailsEvents"/>
    <meta name='layout' content='main'/>
    <r:script>
    $(document).ready(function () {

      /*
       Register a grailsEvents handler for this window, constructor can take a root URL,
       a path to event-bus servlet and options. There are sensible defaults for each argument
       */
      window.grailsEvents = new grails.Events("${createLink(uri: '')}", {logLevel:"debug", transport:'websocket'});

        var data = new Object();

        data.name="some name"

        grailsEvents.send('saveTodo', data); //will send data to server topic 'saveTodo'
        grailsEvents.on('savedTodo', function (data) {
        console.log(data)
        }, {});


    });
    </r:script>
</head>

我的问题是我没有看到控制台中记录了任何数据。有人知道我做错了什么吗?

编辑,我已经找出了问题所在,并相应地更新了 MyEvents.groovy,上面的代码现在可以工作了

【问题讨论】:

  • 基本文档here 没有服务方法的返回类型。检查它是否在没有“def”部分的情况下工作。
  • 您可能想尝试的另一件事是在 javascript 中为 new Events(...) 硬编码地址。
  • 新事件(URI)的URI应该指向什么?
  • 您的MyEvents.groovy 文件中有什么内容?请注意,此文件不得导入任何内容,也不得包含 "$EventsPushHandler.GLOBAL_TOPIC" browser:true 定义。只是一个简单的文件,内容如下events = { 'savedTodo' browser: true }。此示例不需要命名空间即可工作...
  • 请看我编辑的答案 - 我在你的 JS 代码中发现了一个小错字;)

标签: grails push


【解决方案1】:

您似乎已将“savedTodo”映射添加到Plugin 目录中的PushEvents.groovy 文件。 这是错误的!

您应该在自己项目的conf 文件夹中添加自己的*Events.groovy 文件,并保持插件的PushEvents.groovy 文件不变!

到目前为止,其他代码看起来还不错;)

index.gsp 中的 JavaScript 部分有错字:

上面写着:

grailsEvents.send('saveTodo', data);

什么时候应该:

grailsEvents.send('savedTodo', data);

你省略了 "d" ... ;)

【讨论】:

  • 这不是错字,有一个保存事件 -> 对象已保存 -> 已保存事件,但感谢您的输入,因为您正确地认为事件关闭位于错误的位置。谢谢
【解决方案2】:

所以我找到了导致数据没有被推送到客户端的原因。

我编辑了MyService.groovy中的行

event('savedTodo', data)

event(topic:'savedTodo', data:data)

它现在按预期工作

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-06-16
  • 2018-01-17
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多