基本的に、node.js を使用してゼロから基本的なコメット サーバーとクライアントをセットアップしようとしています。動作するはずのプロセスについてGoogleで試してみましたが、テストしていると問題なく動作するようです。しかし、私の頭にはまだ1つの疑問があります。まず、コードを示したいと思います。
var http = require('http');
var sys = require('sys');
var fs = require('fs');
var qs = require('querystring');
var server = http.createServer();
var connections = [];
server.on('request', function(req, res) {
console.log(req.url);
if(req.url == '/index') {
fs.readFile(__dirname + '/index.html', function(err, data){
if(err) {
res.writeHead(err, data);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
} else if(req.url == '/sendData') {
if (req.method == 'POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
var POST = qs.parse(body);
console.log(POST);
res.writeHead(200);
res.end("");
broadcastData(POST);
});
}
} else {
connections.push(res);
}
});
function broadcastData(data) {
for(var i = 0; i < connections.length; i++) {
connections[i].writeHead(200);
connections[i].end(JSON.stringify({'message': data}));
}
}
process.openStdin().addListener('data', function(chunk) {
for(var i = 0; i < connections.length; i++) {
connections[i].writeHead(200);
var message = chunk.toString();
connections[i].end(JSON.stringify({'message': {'name': message}}));
}
});
server.listen(4000);
クライアント側:
function doComet() {
$.getJSON('/', function(events){
doComet();
console.log(events);
$('#content').append(events.message.name);
});
}
function sendData(data) {
$.ajax({
type: "POST",
url: "/sendData",
contentType: 'application/javascript; charset=UTF-8',
data: { name: "John", location: "Boston" }
}).done(function( msg ) {
console.log(msg)
});
}
したがって、標準入力に書き込むデータを送信するリスナーがあり、クライアント側にはデータをサーバーに送信するボタンがあり、サーバーはそれをすべてのクライアントに送信します。
私の質問は、非常に短い時間で多くのイベントが発生した場合はどうなるでしょうか? つまり、サーバーから応答が返されるとすぐに別の ajax 要求が送信されますが、クライアントがまだ接続されていない短い時間があるはずであり、その間に何かが発生した場合、クライアントには新しいデータがありません。
それで、これについて私の考えは正しいですか?この場合、何らかの形でデータを適切に同期して、全員が確実にデータを取得できるようにする必要があります。誰かがそれを正しく行う方法を知っていますか?
助けてくれてありがとう!