0

我从 IP 摄像机那里得到了这个想法,他们使用多部分标头发送 JPEG 帧,还使用 ​​XML 来发送运动检测等事件。数据在随机时刻以一种方式流动,并且在一些超时后必须与服务器建立新连接。我之前已经为这些设备制作了客户端应用程序,但从未使用 AJAX,现在我正在尝试在 node.js 中制作类似的服务器

我知道我可以使用 socket.io,但我现在只是对使用这种方式感兴趣。可能吗?

这将每秒在有边界的块中写入当前日期,并在 telnet 中正常工作。

var http = require('http');
http.createServer(function(request, response) {
    response.writeHead(200, {
        'Content-Type': 'multipart/x-mixed-replace; boundary=boundary',
        'Access-Control-Allow-Origin' : '*',
        'Connection': 'keep-alive'
    });

    setInterval(function () {
        response.write('--boundary\r\n', 'ascii');
        response.write('Content-Type: text/plain\r\n', 'ascii');
        response.write('\r\n', 'ascii');
        var date = new Date();
        response.write(date.toString() + '\r\n\r\n', 'ascii');
    }, 1000);
}).listen(8080);

将记录当前就绪状态的 AJAX 连接

var url = "http://localhost:8080";      
var xhr = $.ajax({
              'url': url,
              'success' : function(html) {
                    $('body').append(html);
               }
            });

xhr.onreadystatechange = function() {
     console.log(xhr.readyState,xhr.status,xhr.responseText);
}

我得到的只是就绪状态“4”和状态“0”,也在我的网络工具中看到“已取消”标题错误。

当我丢失 multipart/x-mixed-replace 并将其推送到正常的 HTTP 连接时,我得到多个就绪状态“3”但没有数据。

4

1 回答 1

1

jQuery 几乎肯定会在它创建的 XHR 上设置自己的内部readystatechange处理程序,而您正在覆盖它。改为使用xhr.addEventListener('readystatechange', function() { ...

于 2012-08-18T19:07:16.197 回答