我打算设计一款游戏服务器。我希望它可以承担非常重的负载,可重用,灵活,但易于编程,我希望得到这些点的平衡。
我决定使用nodejs和redis,protocal的数据格式是JSON,websocket
我有网络开发的经验,但不知道游戏服务器开发,我注意到游戏服务器非常实时,而且消息不是点对点,而是pub-sub频道,
nodejs,redis,JSON是设计通信通道的好选择吗,大多数浏览器都支持websocket吗?
也许有太多问题,唯一的问题是如何为游戏服务器设计沟通渠道?
答案 0 :(得分:4)
首先,下次使用真实的node.js代码,以便人们真正找到您的问题。
关于实际问题,是Node.js的是伟大的多人游戏,尤其是使用WebSockets ......但这些都被推迟了一年,至少有一半是由于最近发现了错误配置代理服务器的安全问题(这实际上不是WebSockets的错,但是每个人和他们的妈妈对此都感到恐慌。)
详情:
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy
如果您希望游戏的延迟时间少于100毫秒,那么您将使用Flash套接字作为后退。
此外,JSON 是一个坏主意。发送游戏数据非常臃肿,当我用Node.js创建我的第一个多人游戏时,我所做的就是创建BiSON。这就像在替换的下降为JSON,它不支持的JSON的特征100%,但它致力于编码数据的和速度
的小尺寸所以,如果你愿意顶实验使用WebSockets周围或在不久的将来使用Flash插槽,那么你不妨看看两个我做的游戏:
https://github.com/BonsaiDen/NodeGame-Orbit(战略游戏Eufloria)
https://github.com/BonsaiDen/NodeGame-Shooter(小行星/几何战争多重交叉)
但请记住,根据您的游戏类型,您需要的不仅仅是发送信息,特别是如果您想要延迟补偿等。
答案 1 :(得分:4)
对于通信渠道,我建议使用socket.io,它提供类似网页框的API,无论浏览器支持什么。它会回退到Flash套接字,然后根据需要转到jsonp和long-polling。它在Node中得到了很好的支持,当用户的浏览器本身启用了websockets时,用户会自动获得更好的效果。
你可以在不到100毫秒内完成http请求 - 在家里我经常看到~75毫秒从谷歌AJAX API服务器获得25K的jquery.min.js,并且〜25ms返回未修改 - 但它需要小心工程肯定。如果你有一个keepalive连接,那么你没有连接设置开销(如果你正在使用SSL来保护用户凭据,这一点尤其重要),所以它可以更快。
即使这样,我也会使用socket.io,因为它也提供了一个很好的API。
答案 2 :(得分:0)
你似乎总体上不够概括。当然,游戏协议是点对点的,它取决于游戏的设计,是否使用集中式服务器。
此外,许多游戏都使用二进制协议,比特流非常常见,以节省带宽。 JSON至少是这个世界的几个数量级,所以也许你应该将你的范围从“游戏”限制到更有限的范围。在这里,你似乎过度概括了。
答案 3 :(得分:0)
我最常用的PC上的浏览器不支持Websockets。尝试通过HTTPS使用无限加载的iframe(通过SSL来避免想要在传递之前完全加载无限加载的iframe的愚蠢代理)以接收数据,这是广泛支持的。要发送,请使用AJAX请求。
通过http:
使iframe页面像这样推送一行<script>newData("...")</script>
如果这对您来说太慢,请使用执行通信的flash / java小程序。