我正试图从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;控制台中的陈述。
我尝试升级的应用程序表现出相同的行为 - 服务器端事件无法到达浏览器。我错过了什么?