我正在尝试实现一个简单的 Web 服务(使用以太网屏蔽在 Arduino 板上运行),它可以通过 Reverse-AJAX 向订阅的客户端提供(推送)信息。Web 服务托管一个网页,该网页显示来自连接到该服务器板的(2D-LIDAR)传感器的信息。每当传感器输出变化(非常频繁和迅速)时,查看该页面的客户端应立即更新。对于这个应用程序 Reverse-AJAX / AJAX Push 似乎是选择的选项,但是我正在努力让服务器部分正常工作。这是我前面提到的网页中“收听”更新的内容:
var xhr = new XMLHttpRequest();
xhr.multipart = true;
xhr.open( 'GET', 'push', true) ;
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
processEvents( window.JSON.parse( xhr.responseText ) );
}
}
xhr.send( null );
我想保持 XmlHttpRequest 永远运行,并让它在服务器端传入一大块(JSON)数据时调用 processEvents 函数。但是我不确定服务器响应是什么,尤其是 HTTP 响应标头应该看起来像预期的那样工作。每当我让服务器发送这样的 HTTP 响应标头时
HTTP/1.1 200 OK\r\n
Connection: keep-alive\r\n
Content-Length: 100\r\n
Content-Type: text/json\r\n
\r\n
XmlHttpRequest 在接收到一个“块”数据后完成。我也尝试不使用“Content-Length”标头,但是“Content-Type: multipart/mixed;boundary=...”或“Transfer-Encoding: chunked”但两者都没有触发 processEvents,据说是因为浏览器正在等待完成的响应,无论这意味着什么。
因此,我正在寻找这样一个对 AJAX-Push 请求的 HTTP 响应的工作示例。HTTP 响应通常需要什么样的外观才能被无限期运行的 XmlHttpRequest 接受并在新数据到达时触发 processEvents?
顺便提一句。我使用 Firefox 64.0 尝试了这些东西。