2011-04-15 107 views
6

我注意到我厌倦了尝试使用OpenTK等高级编程语言(如C#)制作游戏。 C或C++剧照看起来有点超出我的谦虚自我。我只是突然想要回到一些网页开发,并尝试做一个浏览器游戏 - 当然纯HTML5 + JS!HTML5 + Javascript:网络游戏

虽然我想我早晚可以通过ze internetz的帮助弄清楚画布,但我不太清楚应该如何处理网络。

WebSockets看起来很有趣,但他们是否正确的路要走,看到他们仍然相当不发达? AJAX听起来有点慢并且笨重。我不打算制作需要非常低延迟的游戏,但我确实希望保持足够低的水平以便顺利播放。

你会建议什么?

回答

1

我会建议Ajax。使用HTML5和JavaScript在线游戏进行联网的关键是尽量减少到服务器的流量(与其他任何Web应用程序一样),所以您只需找到一种方法即可。你有什么类型的游戏?它是否严格需要连续的互联网连接?

即便如此,Ajax既不缓慢也不笨重。它与任何桌面游戏中的任何其他互联网连接一样快。

+0

我以前用Ajax做过一些事情 - 没有任何库。我认为最大的问题是,我必须排队等待事件发送给客户,一旦他请求他们,将他的行为附加到该请求。它不**感觉**正确。 – copyboy 2011-04-15 12:56:40

+0

Ajax IS比其他连接要慢,因为即使您发送的数据量最小,当您执行Ajax请求时,也会带来所有HTTP开销。当您将数据从客户端发送到服务器时,这是正确的。 Ajax与其他任何东西一样快的唯一方法就是Ajax流式处理(从服务器到客户端)。 – HoLyVieR 2011-04-15 14:27:20

+0

它可能会慢一些,但速度并不慢。 – Ryan 2011-04-15 19:19:34

2

也许你可能会读到更多不同的optionsGoogle将为您提供研究材料。

根据服务器/客户端之间交换的数据量,socket.io似乎足够多达10个更新/秒,最多可容纳100个人。不过,即使Javascript会引入大量开销,使用C++创建网络代码的人仍然会抱怨连接性和速度问题,即使使用高度特定的方法(数据打包,tcp/ip数据包缓存等)也是如此。

2

如果你想留下来,只有HTML5,WebSocket的是一个非常有趣的技术,特别是如果你需要你的数据,以尽可能快的移动。这是唯一可以让你在服务器上双向传输数据的技术。如果您的游戏只要可用,就不需要更新Ajax就足够了。

另外你还需要问自己你想支持你的游戏的浏览器。所有浏览器都不支持WebSocket。

如果您打开其他选项,则可以在浏览器中使用RTMFP in Flash进行P2P连接。这允许您直接执行所有“客户端到客户端”的通信,而不是通过服务器传递数据。它在Flash中,但是it's possible to bridge that functionnality,这样你就可以在Javascript中拥有所有的应用程序逻辑。这项技术可以传递更多的数据,而不会使服务器过载,但是大的缺点是支持。 Flash在Unix平台上支持不好,它是第三方插件。

+0

呵呵,说实话,我不太清楚为什么你的答案是上升的而不是其他的。我明确表示我想要寻求一种纯粹的解决方案,否则它不会包含许多我不知道的信息。没有冒犯,这不是一个错误的答案,我只是认为其他答案更有帮助。 – copyboy 2011-04-15 12:50:21

+0

@copyboy如果你认为另一个对你更有帮助的人,你可以接受其中的一个。这就是接受答案的原因。 – HoLyVieR 2011-04-15 14:21:10

+0

@copyboy如果你认为其他答案更有帮助,那么乔布斯说:“你做错了”。越早掌握NodeJS和Socket.io越好。 – PaulM 2011-04-18 00:08:44

3

如果延迟不是一个大问题,那么你应该使用许多优秀的AJAX/long-poll库中的一个。

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

就WebSockets可用性而言,Chrome和Safari支持本地WebSocket(版本03)。版本03也支持Firefox 4.0和Opera 11,但默认情况下是禁用的。自4.2版起,WebSockets本身也支持iOS。我在HyBi(WebSockets)工作组,并且解决了Mozilla和Opera的安全问题的协议的下一个迭代变得非常接近。 Mozilla和Opera正在积极研究实现,所以我预计最迟他们的下一个主要版本将默认打开WebSockets。但即便如此,Flash后备和iOS支持,WebSockets现在几乎无处不在。

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

+1

去nodejs和socket.io是前进的方向。 – PaulM 2011-04-18 00:07:37

1

对于您可能想要尝试使用现有框架(如联合平台)的网络代码。这里是用纯JS/HTML5的WebSockets没有多用户的绘图应用程序:

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

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

colin