HTML5 + Javascript:游戏网络

HTML5 + Javascript: Networking for a game

本文关键字:游戏网 网络 游戏 Javascript HTML5      更新时间:2023-09-26

我注意到我已经厌倦了尝试使用OpenTK使用c#等高级编程语言制作游戏。C或c++对于我这个卑微的人来说,看起来仍然有点超出了范围。我只是突然有了回到网页开发的冲动,并尝试制作一款浏览器游戏——当然是纯HTML5+JS !

虽然我认为在互联网的帮助下,我迟早可以自己弄清楚画布,但我只是不太知道该如何处理网络。

WebSockets看起来很有趣,但它们是正确的方法吗,因为它们仍然很未开发?AJAX听起来有点缓慢和笨重。我不打算制作一款要求非常低延迟的游戏,但我确实希望它保持在足够低的水平,以使游戏流畅。

你有什么建议吗?

我想你要找的是comet技术,它是用来实现服务器推送技术的。您可以从以下链接找到更多信息:

http://en.wikipedia.org/wiki/Comet_(编程)

http://infrequently.org/2006/03/comet-low-latency-data-for-the-browser/

如果延迟不是一个大问题,那么您可能应该只使用许多好的AJAX/长轮询库中的一个。

WebSockets将为您提供最低延迟的浏览器通信。WebSockets实际上是相当普遍可用的,因为他们是一个WebSockets Flash模拟器web-socket-js,如果没有找到本地WebSocket支持,可以自动加载。使用web-socket-js模拟将比本地WebSockets有更高的延迟,但仍然低于AJAX/long-poll。

在WebSockets可用性方面,Chrome和Safari支持本地WebSockets(版本03)。Firefox 4.0和Opera 11也支持版本03,但默认情况下是禁用的。自4.2起,iOS原生也支持WebSockets。我是HyBi (WebSockets)工作组的一员,该协议的下一个迭代将非常接近于解决Mozilla和Opera的安全问题。Mozilla和Opera正在积极致力于实现,所以我希望他们的下一个主要版本将默认开启WebSockets。但即便如此,在Flash的支持和iOS的支持下,WebSockets现在几乎无处不在。

如果你也愿意做Javascript服务器端,那么我推荐Socket.IO。它是一个node.js后端加上一个客户端JS库。如果浏览器支持它,它默认为WebSockets,包括web-socket-js Flash回退,如果WebSockets连接由于某种原因不能工作(或者你选择禁用WebSockets作为传输),它可以使用长轮询。

也许你应该多读一些不同的选择。Google会为你提供研究资料。

根据服务器/客户端之间交换的数据量,socket。IO似乎足以满足100人每秒10次更新的需求。请记住,即使是Javascript也会带来很多开销,用c++创建网络代码的人仍然抱怨连通性和速度问题,即使使用高度特定的方法(数据打包,tcp/ip数据包缓存等)。

如果你只想使用HTML5, WebSocket是一个非常有趣的技术,特别是当你需要你的数据尽可能快地移动。这是唯一一种允许您与服务器双向传输数据的技术。如果你的游戏不需要在可用时立即更新,那么Ajax就足够了。

你还需要问问自己,你希望你的游戏支持哪种浏览器。并非所有浏览器都支持WebSocket。

如果您对其他选项开放,则可以在浏览器中使用Flash中的RTMFP进行P2P连接。这允许您直接进行所有"客户端到客户端"通信,而不是通过服务器重新传输数据。它是在Flash中,但它可以桥接功能,使您的所有应用程序逻辑在Javascript中。这种技术允许在不使服务器过载的情况下传递更多数据,但最大的缺点是支持。Flash在Unix平台上不受很好的支持,它是一个第三方插件。

我建议使用Ajax。在使用HTML5和JavaScript的在线游戏中实现联网的关键在于最小化服务器的流量(与其他web应用一样),所以你所要做的就是找到一种方法。你想要哪种类型的游戏?它是否需要持续的互联网连接?

即便如此,Ajax既不慢也不笨重。

对于网络代码,您可能希望尝试使用现有框架(如union平台)。这是一个用纯js/html5编写的多用户绘图应用程序,没有websockets:

http://www.unionplatform.com/?page_id=2762

也值得一看www.socket.io。套接字。IO提供了一个带有XHR故障转移的原始websocket包装器,但没有更高级的api(例如,没有房间,没有用户,没有帐户,没有数据共享/管理,如分数等)。

科林