首页 > 解决方案 > 如何让服务器对不同客户端发送的点击事件分别做出反应?

问题描述

我正在编写一个井字游戏,它允许使用 HTML5、CSS、JavaScript (ES6)、Node.js 和 express und socket.io 模块在不同浏览器中的 2 个用户之间玩游戏。

客户端的每次点击都会提供一个字段编号(0 到 8),然后服务器使用该编号来调用移动方法并移动到该字段。

问题是我需要让服务器对两个客户端的点击事件做出不同的响应,我无法弄清楚如何实现它。

为了更清楚,移动方法使用 2 个参数 - 符号(“X”或“O”)和字段(0 到 8),所以基本上谁点击了,在哪里。

客户端在连接时获得分配的符号,因此当他们每个人单击一个字段时,服务器调用一个移动方法,该方法使用客户端的分配符号和从客户端获得的字段编号作为参数。

但是我如何对来自不同客户端的点击做出两个单独的服务器响应,因为每个连接的客户端的套接字都被推送到一个数组客户端,所以第一个客户端是客户端 [0],第二个是客户端 [1]

这是服务器代码的一部分:

    let clients = [];

    io.on("connection", socket => {
    clients.push(socket);

    if (clients.length === 1) {
      io.emit("message", "Please wait for your Opponent!");
    };

    if (clients.length === 2) {
      io.emit("message", "Two players are connected. The game can start now!");

    io.to(clients[0]).emit("symbolMessage", `You play as ${player}.`);

    io.to(clients[1]).emit("symbolMessage", `You play as ${nextPlayer}.`);

    io.emit("turnMessage", `Next move by: ${player}`);
    };


    socket.on("myClick", (data) => {
      myGame.move(player, data);
    });

    socket.on("myClick", (data) => {
      myGame.move(nextPlayer, data)
    }); 

以及客户端代码的相关部分:

    const field = $$("td");

    field.on("click", event => {
    const id = event.target.id;
    const fieldNumber = id.match(/\d/g).join("");
    console.log(fieldNumber);
    socket.emit("myClick", fieldNumber);
    });

标签: javascriptnode.jsexpresssocket.io

解决方案


推荐阅读