Node.js 制作实时多人游戏框架(6)

真是气人啊,Node.js 里这么大的一个BUG,没有人注意到吗?答案真是让我们喜出望外。这个BUG在 v.0.11.3 版本里已经得到了修复。直接查看 libuv 代码的 master 分支也能看到修改后的结果。具体的做法是,在 poll 函数等待完成之后,把 loop 的当前时间,加上一个 timeout。这样即便 GetTickCount 没有反应过来,在经过poll的等待之后,我们还是加上了这段等待的时间。于是计时器就能够顺利地到期了。

也就是说,辛苦半天的问题,在 v.0.11.3 里已经得到了解决。不过,我们的努力不是白费的。因为即便消除了 GetTickCount 函数的影响,poll 函数本身也受到系统定时器的影响。解决方案之一,便是编写 Node.js 插件,更改系统定时器的间隔。

不过我们这次的游戏,初步设定是没有服务器的。客户端建立房间之后,就成为了一个服务器。服务器代码可以跑在 Node-WebKit 的环境中,所以 Windows 系统下计时器的问题的优先级并不是最高的。按照上文中我们给出的解决方案,结果已经足够让我们满意。

收尾

解决了计时器的问题,我们的框架实现也就基本上再没什么阻碍了。我们提供了 WebSocket 的支持(在纯 HTML5 环境下),也自定义了通信协议实现了性能更高的 Socket 支持(Node-WebKit 环境下)。当然,Spaceroom 的功能在最初是比较简陋的,但随着需求的提出和时间的增加,我们也在逐渐地完善这个框架。

例如我们发现在我们的游戏里需要生成一致的随机数的时候,我们就为 Spaceroom 加上了这样的功能。在游戏开始的时候 Spaceroom 会分发随机数种子,客户端的 Spaceroom 提供了利用 md5 的随机性,借助随机数种子生成随机数的方法。

看起来还是蛮欣慰的。在编写这样一个框架的过程当中,也学到了很多的东西。如果你对 Spaceroom 有点兴趣,也可以参与到它当中来。相信,Spaceroom 会在更多的地方施展它的拳脚。

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgxgzp.html