Javascript 如何将socket.io中的按钮功能发送到所有连接

Javascript 如何将socket.io中的按钮功能发送到所有连接,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个tic-tac-toe游戏,它将移动发送到所有连接,我还有一个重置按钮,当游戏结束/获胜时重置游戏 这些动作很好用,可以看到。但是,当按下重置按钮时,只能通过按下按钮的连接看到,因此该功能正确启动,但不会向所有人发出 这是我的服务器端代码: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(

我有一个tic-tac-toe游戏,它将移动发送到所有连接,我还有一个重置按钮,当游戏结束/获胜时重置游戏

这些动作很好用,可以看到。但是,当按下重置按钮时,只能通过按下按钮的连接看到,因此该功能正确启动,但不会向所有人发出

这是我的服务器端代码:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.use("/", express.static('public'));

io.on('connection', function(socket){
  socket.on('move', function(move){
    io.emit('move', move);
  });
  socket.on('reset', function(reset){
        io.emit('reset', reset);
      });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});
这是我客户端代码中显示移动和按钮功能的部分

function sendPickSquare(index) {
    return function() {
        if (gameover || buttons[index].innerHTML !== "")
            return;
        socket.emit('move', {
            'index' : index,
            'value' : selectTurn.value
        });
    };
}

socket.on('move', function(move) {
    buttons[move.index].innerHTML = move.value;

    if (move.value === 'X') {
        selectTurn.value = 'O';
    } else {
        selectTurn.value = 'X';
    }
    checkWin();
});

function resetGame() {
    for (var i = 0; i < buttons.length; i++) {
        buttons[i].style.backgroundColor = '';
        buttons[i].innerHTML = "";  
    }
    gameover = false;
}

for (var i = 0; i < buttons.length; i++) {
    buttons[i].onclick = sendPickSquare(i);
}
$("#replayButton").click(function(reset) {
    socket.emit('reset', resetGame());
});
函数sendPickSquare(索引){ 返回函数(){ if(gameover | |按钮[索引].innerHTML!==“”) 返回; socket.emit('move'{ “索引”:索引, “值”:选择turn.value }); }; } socket.on('move',函数(move){ 按钮[move.index].innerHTML=move.value; 如果(move.value=='X'){ 选择turn.value='O'; }否则{ 选择turn.value='X'; } checkWin(); }); 函数resetGame(){ 对于(变量i=0;i
我想我可能必须引用socket.io视为向所有连接发射的函数。任何帮助都将不胜感激。

好的,我知道了。对于那些可能遇到同样问题的人,以下是答案。 我不需要在服务器端更改任何内容。在客户端,我更改了以下内容:

$('#replayButton').click(function() {
    socket.emit('reset', "");
});

socket.on('reset', function() {
    resetGame();
});

基本上只需要发出被单击的按钮,然后使用socket.on启动该功能。

尝试使用
io.sockets.emit
而不是
io.emit
谢谢您的建议,但仍然不会发送到第二个连接。是否保留了重置功能?(文档没有明确说明)您是否可以共享完整的文件,或者至少共享完整的html/服务器端。我也有同样的问题。
function sendPickSquare(index) {
    return function() {
        if (gameover || buttons[index].innerHTML !== "")
            return;
        socket.emit('move', {
            'index' : index,
            'value' : selectTurn.value
        });
    };
}

socket.on('move', function(move) {
    buttons[move.index].innerHTML = move.value;

    if (move.value === 'X') {
        selectTurn.value = 'O';
    } else {
        selectTurn.value = 'X';
    }
    checkWin();
});

function resetGame() {
    for (var i = 0; i < buttons.length; i++) {
        buttons[i].style.backgroundColor = '';
        buttons[i].innerHTML = "";  
    }
    gameover = false;
}

for (var i = 0; i < buttons.length; i++) {
    buttons[i].onclick = sendPickSquare(i);
}
$("#replayButton").click(function(reset) {
    socket.emit('reset', resetGame());
});