1

我正在开发一个游戏,我的后端是用 NodeJS 编写的,我使用 socket.io 进行实时通信。

我的游戏的特色之一是配对。基本上,如果有两个以上的玩家在配对期间,我的应用程序将为他们创建一个游戏房间(特殊的 socket.io 房间)并开始游戏。

有两种方法可以做到这一点:

  • 在 NodeJS 上创建一个 setInterval。在间隔中,检查 playerInMatchmaking 数组。如果阵列中有超过 2 名玩家,则创建游戏室。只要服务器在线,我就会循环。

  • 每次我接到电话socket.on("matchmaking start")socket.on("matchmaking stop")

使用某种方法有什么好处吗?setInterval 听起来更容易,因为我可以将匹配算法与套接字逻辑分离,但是它的性能会降低,因为匹配算法将在循环中运行,而不是套接字事件。

你怎么看?您还有其他更好的想法吗?

4

1 回答 1

2

您将通过使用事件最大限度地利用 socket.io 和实时通信。如果除了解耦算法没有其他原因,你应该使用事件。如果当前没有用户/玩家参与或搜索比赛,则没有理由一遍又一遍地运行循环。

如果间隔不够小(例如 5 秒),我还会考虑将 Player1 放入队列时会发生什么,Player2 也进入队列,并且在 2 个间隔之间,Player1 因为厌倦了等待而取消了对对手的搜索. 因此,除了您提到的(性能)之外,事件触发系统的主要好处是没有真正的延迟(除了网络、代码循环、抖动......)并且事情会立即发生

于 2016-09-16T10:23:37.223 回答