[问题] TCP client 接收多次data event

楼主: shinhwap (宋)   2016-04-08 16:18:20
大家好 我是node.js新手
最近我写了一个TCP server遇到了一个问题
以下是server端程式码
var net = require('net');
var HOST = '192.168.1.5';
var PORT = 30000;
var clients = [];
const DATA = new Buffer(36);
net.createServer(function(sock) {
clients.push(sock);
console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
sock.on('data', function(packet) {
for(var i =0; i<36; i++){
DATA[i]= packet[i];
}
broadcast(DATA);
});
sock.on('close', function() {
console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
});
sock.on('error', function(err){
clients.splice(clients.indexOf(sock), 1);
console.log('error: ' + sock.remoteAddress +' '+ sock.remotePort);
});
sock.on('end', function () {
clients.splice(clients.indexOf(sock), 1);
console.log('end: ' + sock.remoteAddress +' '+ sock.remotePort);
});
function broadcast(message) {
clients.forEach(function (client) {
client.write(message);
});
console.log(message);
}
}).listen(PORT, HOST);
然后我有一个client端js档会自动跟TCP server建立长连线
var http = require('http').Server(app);
var io = require('socket.io')(http);
var net = require('net');
var HOST = '127.0.0.1';
var PORT = 30000;
var client = new net.Socket();
client.connect(PORT, HOST, function() {
console.log('CONNECTED TO: ' + HOST + ':' + PORT);
});
而我这client他自己有建立一个socket连线
我可以透过网页接收TCP server送过来的data
io.on('connection', function(socket) {
client.on('data', function (packet) {
......
});
但是现在的问题是当我第一次开启网页的时候可以正常的
server端传送一次data 我client端可以触发一次data event
但是当我网页重新整理后 server端传送一次data 我client端变成触发两次data event
再度重新整理 会变成触发三次 以此类推
想请问前辈们有什么方法可以让我网页重新整理后不会重复接收同个data event
是因为我client端的js档开启后不会跟TCP server断线的关系吗?
楼主: shinhwap (宋)   2016-04-11 09:12:00
已解决,把client.on移到io.on外面就不会有重复接收

Links booklink

Contact Us: admin [ a t ] ucptt.com