Grails事件 - 推送插件无法响应事件

时间:2014-11-20 17:26:45

标签: javascript events grails plugins atmosphere

我正试图从events-push:1.0.M7(最新发布的正式版)转移到events-push:1.0.0.BUILD-SNAPSHOT。为了获得后一版本,我克隆了https://github.com/smaldini/grails-events-push repo并在本地构建了插件。 Grails插件的更高版本的优势在于它使用了更新版本的Atmosphere JavaScript和Java库。

在README文件中,插件引用了https://github.com/smaldini/grailsTodos处的GrailsTodos应用程序。但是,Todos应用程序中的配置和代码与其README文件中提供的事件推送使用信息没有任何共同之处。

相反,我正在尝试使用另一个示例来演示事件 - 推送插件:https://www.dropbox.com/s/378bqmbu3ad4fnt/GrailsEventsPush.zip。这是一个在Grails 2.3.7中运行的应用程序,它使用events-push:1.0.M7。它与event-push插件的已发布版本(M7)一起开箱即用。

以下是我使用events-push编译和运行的步骤:1.0.0.BUILD-SNAPSHOT(我使用' grails maven-install'在本地安装):

在BuildConfig.groovy

grails.servlet.version = "3.0"
grails.tomcat.nio = true
...
dependencies {
    compile 'org.grails.plugins:events:1.0.0.BUILD-SNAPSHOT'
}

plugins {
    ...
    //compile ":events-push:1.0.M7"
    compile ":events-push:1.0.0.BUILD-SNAPSHOT"
}

在MyEvents.groovy

events = {
  'bagsUpdated' namespace: 'browser', browser:true // allows browser push on this topic
}

在EventTestingController中:

    def updateBags() {
      Thread.sleep(3000)
      event([namespace: 'browser', topic: 'bagsUpdated']) // will trigger registered browsers on 'bagsUpdated' topic
      render "OK"
    }

我没有改变index.gsp:

<script type="text/javascript">
try {
    var grailsEvents = new grails.Events("${createLink(uri:'')}", {transport: "sse"});
    grailsEvents.on('bagsUpdated', function (data) {
        window.console && console.log("GOT bags!");
        $("#waiting").html("Event fired!");
    });
} catch (error) {
    console.log("ERROR: " + error.toString());
}

$(function () {
    // Call controller method that emits event when its done
    $.ajax({
        url: "${createLink(action:'updateBags')}",

        success: function () {
            console.log("Event should have been already fired...");
        },

        error: function () {
            console.log("Ops something went wrong... ");
        }
    });
});
</script>

与1.0.M7版本的插件一起正常工作的代码不适用于1.0.0.BUILD-SNAPSHOT版本。以下是我在Chrome控制台中看到的内容:

defer connecting topic: eventsbus grailsEvents.js:108
defer connecting topic: bagsUpdated grailsEvents.js:108
XHR finished loading: POST "http://localhost:8080/GrailsEventsPush/g-eventsbus/eventsbus?X-Atmosphere-t…sport=polling&X-Cache-Date=0&Content-Type=application/json&_=1416503898595". jquery.atmosphere.js:1691
XHR finished loading: POST "http://localhost:8080/GrailsEventsPush/g-eventsbus/eventsbus?X-Atmosphere-t…sport=polling&X-Cache-Date=0&Content-Type=application/json&_=1416503898598". jquery.atmosphere.js:1691
XHR finished loading: GET "http://localhost:8080/GrailsEventsPush/eventTesting/updateBags". jquery-1.11.0.min.js:4
Event should have been already fired... index:32

没有错误 - 浏览器根本没有让控制器触发事件​​,这会产生&#34; GOT袋!&#34;和#34;事件被解雇了!&#34;控制台中的陈述。

我尝试升级的应用程序表现出相同的行为 - 服务器端事件无法到达浏览器。我错过了什么?

0 个答案:

没有答案