Node JS和Socket IO

时间:2014-08-25 14:10:38

标签: javascript node.js socket.io

我正在尝试编写一个带有成员函数的对象,用于通过Node JS和Socket IO接收和发送与客户端之间的数据。问题是每次我从客户端发送数据时,都会触发一个新的“连接”事件。它是如何工作的?我认为连接事件只会发生在新连接上。因此,使用下面的代码,日志回应来自客户端的每次接收的“新连接”。这似乎不对。

io.sockets.on('connection', function (socket) {

console.log('New connection');

var localSocket = socket;

var newsock = new UserSocket(localSocket);

newsock.game = null;
newsock.host = null;
newsock.opponent = null;
newsock.room = "";

newsock.SendToHostSocket('Welcome to Baseball Strategy II');

arrSockets.push(socket);

});


function UserSocket(sock) {

var localSock = sock;

var o = this;

this.sock = localSock;

this.sock.on('clientData', function (data) {

    console.log("user socket object");
    console.log(o);
    o.ParseClientData(data);

});

}

这是我对客户的简化版本:

$(document).ready( function () {

var socket = io.connect('http://local.baseball.com:3333');

function SocketGameOut(outstring) {

    socket.emit('clientData', outstring );

}


$("#hostGame").click( function () {

    var gamenum = $('input[name=gameSelect]:checked', '#gameForm').val();

    var aSendData = { command : "newgame" , senddata : { gameid : gamenum } };
    var senddata = JSON.stringify(aSendData);
    SocketGameOut(senddata);

});


});

1 个答案:

答案 0 :(得分:0)

修改您的代码,如下所示。

//use once.('connection') instead of on.('connection')


io.sockets.once('connection', function (socket) {

console.log('New connection');

var localSocket = socket;

var newsock = new UserSocket(localSocket);

newsock.game = null;
newsock.host = null;
newsock.opponent = null;
newsock.room = "";

newsock.SendToHostSocket('Welcome to Baseball Strategy II');

arrSockets.push(socket);

});