我对nodeJs的socket.io有问题。
我正在尝试创建从客户端到服务器的连接。客户端连接后,服务器会向客户端发送一条消息(ack)。
在此之前,一切正常,但是当我断开服务器并重新启动时,它将两次向客户端发送消息。
如果我第三次重复该操作,则会出现三则消息。
我已经抓住了问题:
client.js
var socket = require('socket.io-client')('http://localhost:8050', {
'forceNew':true
});
socket.on('connect', onConnect);
function onConnect(){
console.log('connect ' + socket.id);
socket.emit('sendConnect','First connect');
socket.on("ack", function(data) {
console.log("ack reçu");
});
socket.on('disconnect', function(reason) {
console.log(reason);
});
}
server.js
var io = require("socket.io");
var sockets = io.listen(8050);
sockets.on('connection', function (socket) {
socket.on('sendConnect', function (data) {
console.log("message :" + data);
socket.emit('ack');
socket.on('disconnect', function() {
console.log('Got disconnect!');
});
});
});
我查看了此错误是否已经到来而没有找到答案。
我一定做错了!
预先感谢您的帮助。
答案 0 :(得分:1)
您的onConnect
函数每次套接字连接时都会添加新的事件侦听器。像这样将事件订阅移出onConnect
:
var socket = require('socket.io-client')('http://localhost:8050', {
forceNew: true
});
socket.on('connect', onConnect);
socket.on('ack', function(data) {
console.log('ack reçu');
});
socket.on('disconnect', function(reason) {
console.log(reason);
});
function onConnect() {
console.log('connect ' + socket.id);
socket.emit('sendConnect', 'First connect');
}