0

我正在尝试实现一个简单的 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 尝试了这些东西。

4

1 回答 1

0

如果您正在寻找基于 http 的低延迟通信,您应该看看 websockets。您的带有 Post 方法的 xmlhttp 将有大约 50 毫秒的高延迟,相信我,我之前尝试开发基于彩虹颜色选择器的 rgb 控制器,同步和异步 post 方法对我来说效果不佳,脚本只是等待回复。

现在要具体回答您的问题,请下载 postman,该软件可让您模拟您希望的所有 http 方法请求和标头。还为您提供了以多种语言实现的代码,并且不要忘记 chrome > network 选项卡上的 f12,这样您可以检查如何处理输出或 http 请求

于 2019-08-13T00:58:06.490 回答