Temel olarak, node.js kullanarak sıfırdan temel bir kuyruklu yıldız sunucu ve istemci kurmaya çalışıyorum. Çalışması gereken süreç hakkında Google'a denemeler denedim ve test ettiğim gibi iyi çalışıyor gibi görünüyor. Ancak yine de bir sorum kafamda. İlk önce size kodu göstermek istiyorum.Node.js ve Comet
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);
istemci tarafı:
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)
});
}
Yani orada ben stdin yazmak ve ayrıca sunucusuna veri gönderir istemci tarafında bir düğme var veri gönderen bir dinleyici ve Sunucu tüm istemcilere gönderir.
Sorum şu: Çok kısa bir süre içinde çok sayıda olay meydana gelirse? Yani, sunucudan bir yanıt geldiğinde, başka bir ajax isteği gönderilir, ancak istemcinin henüz bağlanmadığı bir zamanda kısa bir süre olmalıdır ve bu süre zarfında bir şey olursa, müşteri yeni verilere sahip olmayacaktır.
Düşüncelerim bu konuda doğru mu? Bu durumda, herkesin aldığından emin olmak için verileri düzgün bir şekilde senkronize etmeliyim. Bunu nasıl yapacaklarını bilen var mı?
Yardımlarınız için teşekkür ederiz!
Neden kendi kuyruk takımınızı uyguluyorsunuz? Sizin için işleyen birçok kütüphaneden birini kullanmalısınız. Http://socket.io/ – generalhenry
Neden? Bu şeylerin herhangi bir bilgi olmadan kullanmaya başlamadan önce nasıl çalıştığını merak ediyorum. – stomseven
Kodunuzu biraz temizlemekten çok etkilendim: http://runnable.com/UWhebgy1CIBlAACd hala sel sorunu hakkında düşünüyor – generalhenry