2011-04-27 69 views
1

我正在用jQuery和PHP构建“多人世界”。这是一个有点它是如何工作的:用jQuery和PHP减少MySQL查询量

  1. 的用户的字符的位置从数据库中,用户据此绘制拍摄(位置值是CSS值 - 左上)

  2. 用户能够移动关于使用键盘上的箭头键,使他们的角色使用jQuery动画。发生这种情况时(在每次按下箭头时),用户的位置值将被插入到数据库中并进行更新。

  3. 为了使这个“全球”(使用户看到对方),你可以说,该值需要使用AJAX

我的问题每个用户都在更新一次有我需要不断调用我写的连接到MySQL服务器并从数据库表中获取值的JavaScript函数。而这个功能需要不断地通过setInterval(thisFunction, 1000);来调用,但是我的主机只是暂停了我的重载服务器的资源,我想这是因为我所有的MySQL查询。即使在重复从我的数据库中获取值之后,我也必须每隔几秒插入一次值,所以我可以想象,如果有足够的客户端登录,会随着时间的推移导致崩溃。如何减少我正在使用的查询量?有另一种方法可以做我需要做的事吗?谢谢。

回答

0

您应该查看长轮询 - http://en.wikipedia.org/wiki/Push_technology。此方法允许您与服务器建立连接,然后仅在需要时才更新它。然而,从它的声音来看,如果你想每次都更新,你会发现一个非常密集的事情,你可能想要研究另一种存储这些数据的方式,但是如果你想知道有多大公司这样做,他们往往会大量的服务器来处理它们,但他们也会使用类似于长轮询的技术。

0

还有另一种方法,它是模拟或使用实际的套接字。 (而不是一直拉数据(刷新以检查是否有新记录),您可以通过WebSockets推送数据(目前在Chrome中可用)(至少据我所知,并未在FF4中试用),或者您可以使用Node.js为更加精简长池。这样,玩家之间的沟通将是双向的,不需要MySQL来存储位置。

0

结帐Tornado

从他们的网站:

龙卷风是可扩展的,无阻塞的网络服务器和工具,权力的FriendFeed的一个开源版本。 FriendFeed应用程序是使用看起来有点像Web的Web框架编写的。py或Google的web应用程序,但需要额外的工具和优化以充分利用底层的非阻塞基础架构。

这个框架与大多数主流的Web服务器框架(当然也包括大多数Python框架)截然不同,因为它非阻塞并且速度相当快。因为它是非阻塞的并使用epoll,它可以处理数千个同时存在的连接,这意味着它非常适合实时Web服务。我们专门构建了Web服务器来处理FriendFeed的实时功能 - FriendFeed的每个活跃用户都保持与FriendFeed服务器的开放连接。 (有关扩展服务器以支持数千个客户端的更多信息,请参阅C10K问题。)