0

マルチパートヘッダーを使用してJPEGフレームを送信するだけでなく、モーション検出などのイベントにXMLを使用するIPカメラからアイデアを得ました。データはランダムな瞬間に一方向に流れ、タイムアウト後にサーバーへの新しい接続を確立する必要があります。以前にこれらのデバイス用のクライアント アプリケーションを作成したことがありますが、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 almost certainly sets its own internal readystatechange handler on the XHR it creates, and you're overwriting it. Use xhr.addEventListener('readystatechange', function() { ... instead.

于 2012-08-18T19:07:16.197 に答える