我创建了一个nodejs服务器,它使用socket.io与web客户端建立通信,服务器正在向特定客户端发送套接字,问题是如果我有5个客户端连接到服务器,客户端将收到发送的消息5次!
这是我的代码:
var fs = require('fs'),
http = require('http'),
io = require('socket.io'),
qs = require('querystring');
sys = require ('util'),
url = require('url');
var message, AndroidID;
//Traitement Serveur nodejs
var server = http.createServer(function(req, res) {
if(req.method=='POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end',function(){
server.emit('sendingData', body);
console.log("Body : " + body);
});
res.write("success");
res.end();
} else {
res.writeHead(200, { 'Content-type': 'text/html'});
res.end(fs.readFileSync(__dirname + '/index.html'));
}
}).listen(8080, function() {
console.log('Listening at: http://localhost:8080');
});
var socket = io.listen(server);
var clients = {};
var compteur = 0;
// Traitement socket.io
socket.on('connection', function (client) {
clients[compteur] = client;
client.emit('firstConnection', client.id, compteur);
console.log('clients : ', clients);
compteur += 1;
client.on('message', function (msg) {
console.log('Message Received: ', msg);
client.broadcast.emit('message', msg);
});
server.on('sendingData', function(data){
message = data.substring(8, data.lastIndexOf('&'));
androidID = data.substr(-1);
console.log('[+] Sending Data : ', message ,' TO : ', parseInt(androidID));
clients[parseInt(androidID)].emit('androidmsg', message);
});
});
nodejs服务器正在从php HTTPClient接收数据
答案 0 :(得分:2)
您应该将server.on('sendingData', function(data){...});
放在socket.on('connection', function (client){...});
之外。这是因为sendingData
事件是针对http服务器而不是针对socket.io服务器的。
将其放在socket.io
连接处理程序中会使每个连接的客户端重复执行到socket.io服务器