HTML5 + Javascript:游戏网络
HTML5 + Javascript: Networking for a game
我注意到我已经厌倦了尝试使用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(例如,没有房间,没有用户,没有帐户,没有数据共享/管理,如分数等)。
科林- 通过Magento的网络服务检索运费
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- Google/html5语音识别JavaScript SDK Chrome网络工具包SpeechRecognition
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 如何使用密码检测网络中的状态连接
- 如何有效地将游戏数据存储在URL查询字符串中
- 为网络游戏制作动画
- 为什么我处理的网络游戏只能在Chrome中运行
- 玩网络游戏服务 - 回合制游戏 - 在Javascript中创建和加入房间
- 如何为网络游戏建立对等连接
- 是否可以向用户隐藏基于网络的游戏jQuery代码
- 在网络象棋游戏中,经常使用哪种服务器推送技术来刷新双人浏览器上的棋盘
- 游戏多人对话网络套接字
- 集合风格的网络游戏
- socket.io实时网络应用程序,三人参与游戏
- 用于网络游戏开发的Rails
- 网络冒险游戏中用于叙事的滚动文本
- 如何在windows网络的内部网web应用程序中获取用户的用户名
- 为在线多人游戏设置点对点网络
- HTML5 + Javascript:游戏网络