能否使用JavaScript制作实时网络游戏?

7

是否可以使用JavaScript制作实时网络游戏?我看到Flash可以做到,但我想制作一个不依赖任何插件的多人在线游戏。我曾经了解到,保持Ajax连接以进行流式通信是不可能的,并且每秒钟建立几个新的Ajax连接以使客户端与服务器保持同步也不可行。

6个回答

4

1
我在 groovebasin 中使用了 socket.io,它绝对表现出色。Groovebasin 不是游戏,但 socket.io 满足所有要求。 - thejoshwolfe

4

2
WebSockets是使用JavaScript在浏览器中进行实时(低延迟)网络通信的解决方案。提供WebSocket API的Flash有备选方案。
您可以在服务器上继续使用JavaScript,并使用类似http://RingoJs.org这样的东西,它具有WebSockets的连接器。如果您使用这两个,您将获得以下结果:
// 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');

0

没错。看看一个叫做Comet的技术(就像Ajax加强版)。Lift(一个Scala Web框架;Twitter和其他公司都在使用)内置了出色的Comet支持。


0
据我所知,只有在HTML5中才能使用无插件套接字。
但是您可以使用Flash来完成此任务。由于几乎所有浏览器现在都支持Flash,我认为这是可以的。
此外,还有一些技巧可以避免大量的ajax调用来实现相同的功能。尝试找到长轮询。
希望这可以帮助到您。

-1

是的,它不需要任何特殊的库,就像某些人所暗示的那样。


我质疑作者是否想在不使用JavaScript库的情况下开始这项艰巨的任务。库和插件是不同的。例如,JavaScript库可以在页面上运行时下载,而无需用户操作(因此不是什么大问题);而插件必须由用户显式地安装到浏览器中。 - John K
我质疑为什么有人要安装Windows(tm)只是为了使用计算器功能。你明白我的意思... - Christian
1
我明白在Windows平台上使用计算器可能有些过头了,但是作者提出了一个相反的场景:将通常需要速度和资源的大型东西带入“温顺”的浏览器平台。所以这个比喻让我有些摸不着头脑 :) - John K
嗯,我没有告诉他不要使用库,我只是在说我以前做过这种事情,没有任何专门的软件……它涉及一个持久连接(正常的ajax调用),服务器延迟回复约25秒钟(或直到情况发生改变)。不是什么大任务。请参见此处:https://dev59.com/qk_Sa4cB1Zd3GeqP8gea(虽然这是一个漫长的故事……) - Christian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接