[問題] TCP client 接收多次data event

看板Ajax作者 (宋)時間8年前 (2016/04/08 16:18), 8年前編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/1
大家好 我是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斷線的關係嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.96.40.160 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1460103507.A.4E6.html ※ 編輯: shinhwap (140.96.40.160), 04/08/2016 16:19:04

04/11 09:12, , 1F
已解決,把client.on移到io.on外面就不會有重複接收
04/11 09:12, 1F
文章代碼(AID): #1N1sbJJc (Ajax)