我正在 Chrome 中的 Rails 应用程序(服务器:Puma)中测试 SSE,但它们没有被触发:
setTimeout((function() {
console.log("log1");
var source = new EventSource('/websites/21/backlinks/realtime_push');
source.addEventListener('pagination', function(e) {
console.log("log2");
var data = JSON.parse(e.data);
$('#pagination').html(data.html);
});
}), 1);
只有“log1”被写入控制台。
在开发人员工具中,每次服务器推送某些内容(每秒)时,我都会看到 XHR 请求,但响应为空 - 不确定开发人员工具是否只是不显示它或其他错误。
curl http://localhost:3000/websites/21/backlinks/realtime_push
返回:
event: pagination
data: {"html":"pagination"}
event: pagination
data: {"html":"pagination"}
所以数据应该被发回......
这里可能是什么问题?
更新:问题是这个问题的猴子补丁,来自这里的问题:ActionController::Live with SSE not working proper
“这似乎只是为了解决问题......虽然它会导致控制器实际发送数据,但 JavaScript 中的接收端由于某种原因仍然不会收到事件通知”
这很奇怪,因为在这两种情况下,当我使用 render_to_string 和不使用时,我得到的 curl 标题相同:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-UA-Compatible: chrome=1
Content-Type: text/event-stream
Cache-Control: no-cache
X-Request-Id: 4de7c8a6-a54f-45ef-9013-0447f85438c2
X-Runtime: 0.033030
Transfer-Encoding: chunked
但在一种情况下,它适用于 JavaScript 端,而在另一种情况下则不起作用:/