使用Socket.io的不同房间的不同计时器

时间:2017-11-21 00:20:24

标签: node.js websocket socket.io

我发现其他3篇关于为回合制游戏实施计时器的帖子,但没有一个得到最终答案。

我正在使用WebSockets(Socket.io)房间开展扑克游戏项目。

每个房间都有一个计时器,负责处理来自服务器的转弯,例如,每个玩家有10秒钟选择一张牌。如果只有一个房间,我可以通过使用setInterval并在每个间隔结束时更改转弯变量并向客户端发出新转弯来实现此目的。

但是现在,当有很多房间认为node.js是单线程时,我很困惑如何为每个房间实现一个特定的计时器。

1 个答案:

答案 0 :(得分:3)

尽管是单线程的,但Node.js可以同时管理多个计时器。你可以设置它们。你是怎么做的取决于你。请注意,如果您使用对象管理bind,则需要使用Room。您可以使用变量来管理(例如,取消)您的计时器。

这是一个一般例子:

var Room = function() {
  this.id = String(Date.now());
  this.timer = setInterval(this.timerFunction.bind(this), 10000);
}

Room.prototype.timerFunction = function() {
  // Example
  io.to(this.id).emit("some message");
}

// Create one
new Room();