[問題] 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