マルチパートヘッダーを使用して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' が得られますが、データはありません。