2013-05-28 110 views
0

我想创建一个实时多人网页游戏,现在我正在使用数据库来保存客户端动作,并且每个客户端都会向数据库发送一个AJAX来连续检查其他球员每100或200毫秒动作一次,我想知道是否有更好的方法可以解决这个问题。实时多人游戏技巧

如果数据库中的某些内容发生更改,服务器是否可以实际联系客户端?然后,如果一个客户做出了一个行动,服务器可以联系另一个客户,告诉它一个行动已经完成。还是有另一种方式去比这更好的检查每个客户端的数据库的恒定循环?

+2

您正在寻找网络插孔/长轮询 – SLaks

+1

的DB比状态存储更适合长期存储。考虑在睡眠()循环中使用PHP的APC ... – dandavis

回答

1

我建议你看看一个客户端 - 服务器(websocket)框架,如socket.io或SignalR。

有了这样的框架,您可以维护与服务器的持久连接。您可以将其与pub-sub模型结合使用,以便在同一游戏中将事件提升/传递给其他客户端(服务器端验证之后)。

如果您想登录到数据库,那很好,但不会使用数据库(除非您绑定到redis + pub-sub作为例外)作为您的传输。

参见:

  • 的WebSockets
  • 彗星(长轮询,everscroll,iframe的事件)
  • 发布 - 订阅
+0

您可以链接到的任何教程或信息?我之前查找过socket.io和node.js,甚至安装了它们,但是我找不到那么多文档。 – Cains

+0

搜索'socket.io入门',你会发现很多基本的教程......除此之外,我发现罗布·康纳利尝试安静的演示文稿很棒https://vimeo.com/43548699。 – Tracker1

1

有多个HTML5 WebSocket解决方案(基本上推送数据并将数据发送到实现),因为这种方法越来越受欢迎。 Pusher是一个选项(和我最喜欢的),但也有其他人可以通过搜索轻松找到。我也看看What are Websockets?this question