Socket.io和Nodejs:向多个客户端发送响应并更改不被保存(?)

编辑:我的第一个问题已经解决(相当简单)。 第二个问题仍然有效,对于这个问题,我不知道如何解决这个问题。

我正在制作一个多人数独游戏。 我是Nodejs和套接字的新手,所以如果我的想法是错误的,请纠正我。

这是一个正在进行的工作,现在我正在做的是:当用户将一个值input到其中一个单元格中时,它将使用该单元格的索引发送到服务器的请求(?)。 然后,服务器从答题卡中find正确答案,并将结果发送回客户端。 然后,javascript代码将通过,如果正确的input被放置,它将把所有用户的答案( 注:我假设用户正在input正确的答案,现在我将工作在错误的答案部分之后 )。

问题:

1)现在,正确的答案将locking在单元格中提交正确答案的人,但不会显示给所有客户。

2)如果我向另一个单元格提交答案(无论是否正确),它将删除以前的更改 – 也就是用户先前input并locking的单元格,

这是我的JavaScript代码:

function closeCellInput($cell) { var index = $boardCells.index($cell); // var target = findTarget(index); //SHOULD BE SERVER socket.emit('target', index); socket.on('targetResult', function(data){ console.log('data: ' + data); var target = data; var number = $cell.find('input').val(); var complete = false; $cell.empty().removeClass('empty').removeClass('solved').attr('style', null); socket.emit('index', index); if (number == target) { $cell.text(number).addClass('solved'); complete = true; socket.emit('solved', number); //complete = checkComplete(); } else if (number != '') { var cell = $cell[0]; var animator = new Animator({duration:750}); var animation = new ColorStyleSubject(cell, "background-color", "#FF8888", "#FFFFFF"); $cell.text('').addClass('empty'); animator.addSubject(animation).play(); //$cell.html('<input type="text"/>').find('input').focus(); //adding above line does not make the red light blinkerino } else { $cell.text('').addClass('empty'); } $selected = $([]); }); } 

这是我的相关服务器代码(如果需要):

 io.on('connection', function(socket){ console.log('a user connected'); socket.on('disconnect', function(){ console.log('user disconnected'); }); socket.on('solved', function(val){ console.log('number value: ' + val) }); socket.on('target', function(index){ //Hard coded answers for now, but will be changed later var solution = "435269781682571493197834562826195347374682915951743628519326874248957136763418259"; console.log('index: ' + solution[index]); socket.emit('targetResult', solution[index]); }); 

});

提前致谢!!!

在你的代码服务器上:

 socket.on('target', function(index){ //Hard coded answers for now, but will be changed later var solution = "435269781682571493197834562826195347374682915951743628519326874248957136763418259"; console.log('index: ' + solution[index]); socket.emit('targetResult', solution[index]); }); 

您只发送到发件人连接到套接字 。 为了发送给每个人,使用下面的语法:

 socket.on('target', function(index){ //Hard coded answers for now, but will be changed later var solution = "435269781682571493197834562826195347374682915951743628519326874248957136763418259"; console.log('index: ' + solution[index]); io.sockets.emit('targetResult', solution[index]); }); 

注意我把socket.emitio.sockets.emit 。 这使得socket.io广播到所有连接的套接字。

正如Sean Ryan所提到的,如果您只想向连接到相同游戏的玩家广播,则socket.io文档中有关于不同房间的部分: http : //socket.io/docs/rooms-and-namespaces/