【发布时间】:2015-06-16 11:57:53
【问题描述】:
我需要让服务器发送的事件与 Grails 一起使用。我觉得我很接近,但并不完全在那里。 JavaScript 请求成功到达控制器,但每次都抛出错误。它会每 2 秒左右重试一次(可能是由于错误)。
当服务器的会话计时器低于 5 分钟时,我需要向用户发送一个事件。我正在尝试使用 HTML5 的 EventSource,因为我只想向服务器发送一个请求(多个请求每次都会重置会话计时器)。根据Lean Java Engineering,HTML5 满足我的需求。
-Javascript-
console.log("Starting eventSource");
var eventSource = new EventSource("SSETest/push");
console.log("Started eventSource");
eventSource.onmessage = function(event) { console.log("Message received: " + event.data); };
eventSource.onopen = function(event) { console.log("Open " + event); };
eventSource.onerror = function(event) { console.log("Error " + event); };
console.log("eventState: " + eventSource.readyState);
// Stop trying after 10 seconds of errors
setTimeout(function() {eventSource.close();}, 10000);
-Grails 控制器-
package sessionManager
class SSETestController {
def push = {
println "$request made it!"
response.setContentType("text/event-stream, charset=UTF-8")
response << "data: the data"
render "HI"
}
}
-Grails 控制台-
org.apache.catalina.core.ApplicationHttpRequest@4f889fad made it!
org.apache.catalina.core.ApplicationHttpRequest@13f78b8c made it!
org.apache.catalina.core.ApplicationHttpRequest@4b50734c made it!
org.apache.catalina.core.ApplicationHttpRequest@4c4bde24 made it!
-JavaScript 控制台-
Starting eventSource
Started eventSource
eventState: 0
Open [object Event]
Error [object Event]
Open [object Event]
Error [object Event]
Open [object Event]
Error [object Event]
Open [object Event]
Error [object Event]
提前致谢, 克里斯·汉考克
【问题讨论】:
标签: javascript grails server-sent-events