我正在开发一个游戏,我的后端用NodeJS编写,我使用socket.io进行实时通信。
我的游戏的一个特点是配对。基本上,如果两个以上的玩家处于配对期间,我的应用程序将为他们创建一个游戏室(特殊的socket.io房间)并开始游戏。
有两种方法可以做到这一点:
在NodeJS上创建一个setInterval。在间隔中,检查playersInMatchmaking阵列。如果阵列中有超过2个玩家,请创建游戏室。只要服务器在线,我就会循环。
每次收到socket.on("matchmaking start")
或socket.on("matchmaking stop")
使用某种方法有什么好处吗? setInterval听起来更容易,因为我可以将匹配算法与套接字逻辑分离,但是由于匹配算法将在循环中运行而不是套接字事件,因此性能较差。
你怎么看?你还有其他更好的想法吗?答案 0 :(得分:2)
您将通过使用事件最大限度地利用socket.io和实时通信。如果除了解耦算法之外没有其他原因,您应该使用事件。如果当前没有用户/玩家参与或搜索匹配,则没有理由反复运行循环。
如果间隔不够小(例如5秒),我还会考虑当Player1进入队列时会发生什么,Player2也进入队列,并且在2个间隔之间,Player1取消他对对手的搜索,因为他&厌倦了等待。所以事件触发系统的主要好处是你提到的(性能)之外的是没有真正的延迟(除了网络,代码循环,抖动......)并且事情立即发生