是否可以用 JavaScript 制作实时网络游戏
Posted
技术标签:
【中文标题】是否可以用 JavaScript 制作实时网络游戏【英文标题】:Is it possible to make real-time network games in JavaScript 【发布时间】:2011-04-23 07:48:42 【问题描述】:是否可以使用 javascript 制作实时网络游戏?我已经看到 flash 做到了,但我对制作一个不依赖任何插件的基于浏览器的多人游戏很感兴趣。我已经读过,要保持 Ajax 连接打开以进行流式通信是不可能的,并且每秒创建几个新的 Ajax 连接以保持客户端与服务器同步是不可行的。
【问题讨论】:
【参考方案1】:使用 WebRTC 而不是 WebSockets 来访问点对点和 UDP。见这里:Does WebRTC use TCP or UDP? 和 WebRTC vs Websockets: If WebRTC can do Video, Audio, and Data, why do I need Websockets?
【讨论】:
【参考方案2】:看起来http://socket.io/ 是一个不错的解决方案。
【讨论】:
我在groovebasin 中使用了socket.io,它确实很好用。 Groovebasin 不是游戏,但 socket.io 满足所有要求。【参考方案3】:WebSockets 是在浏览器中使用 JavaScript 进行实时(低延迟)网络的解决方案。为 WebSocket API 提供 Flash 有一些后备方案。
您可以在服务器上坚持使用 JavaScript,并使用 http://RingoJs.org 之类的东西,它有用于 WebSocket 的连接器。如果你使用这两个,你会得到:
// SERVER
websocket.addWebSocket(context, "/websocket", function(socket)
socket.onmessage = function(m)
// message m recieved from server
;
socket.send('my message to the client');
);
// CLIENT
var ws = new WebSocket("ws://localhost/websocket");
ws.onMessage(function(m)
// message m recieved from server
// do something with it
return;
);
ws.send('message to server');
【讨论】:
【参考方案4】:据我所知,没有插件的套接字只能在 html5 中实现。 但是您可以使用 flash 来完成此任务。由于现在几乎每个浏览器都支持 flash,我认为没问题。 还有一些 hack 允许在没有一堆 ajax 调用的情况下做同样的事情。尝试找到长轮询。 希望对你有帮助
【讨论】:
【参考方案5】:是的。研究一种名为 Comet 的技术(如 Ajax 的类固醇)。 Lift(一个 Scala 网络框架;twitter 和其他人使用它)内置了出色的 Comet 支持。
【讨论】:
【参考方案6】:是的,它不需要某些人似乎暗示的任何特殊库。
【讨论】:
我质疑作者是否愿意在不使用 JavaScript 库的情况下着手完成这项大型任务。库和插件是不同的。例如,JavaScript 库可以在页面运行时下载,无需用户操作(所以没什么大不了的);而插件必须由用户显式安装到浏览器中。 我质疑为什么有人安装 Windows (tm) 只是为了拥有计算器功能。你明白我的意思...... 我知道计算器的使用对于 Windows 平台来说是多余的;然而,作者提出了一个相反的方案:将通常需要速度和资源的大型东西带入“温顺”的浏览器平台。所以你在类比上迷失了我:) 好吧,我没有告诉他不要使用库,我只是说我以前做过这种东西,没有任何专门的软件......它涉及持久连接(正常的 ajax 调用)和服务器延迟回复约 25 秒(或直到情况发生变化)。没有那么大的任务。见这里:***.com/questions/3235973/…(虽然说来话长……)以上是关于是否可以用 JavaScript 制作实时网络游戏的主要内容,如果未能解决你的问题,请参考以下文章