javascript - 如何让服务器对不同客户端发送的点击事件分别做出反应?
问题描述
我正在编写一个井字游戏,它允许使用 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);
});
解决方案
推荐阅读
- php - php如何替换multi先| 最后 | 到字符串中的其他字符
- python - Plotly:格式化 y 轴刻度和文本标签
- go - Go中的array和array[:]有区别吗?
- python - 用一组字符替换字符串中的“#”,给出所有可能的字符串组合
- kubernetes - 为什么 kubernetes 使用 bost Rest API 和 gRPC?
- javascript - AlpineJS:在里面使用哪个 x-on 指令
- javascript - 结帐后如何将摩洛哥国家代码添加到wp woocomerce中的电话号码?
- r - 有效过滤掉所有列连续为零的位置
- python - 无法显示 pyspark 数据帧,即使它很小('.show()' 问题)
- reactjs - DeepL 客户端站点使用情况