使用jQuery和PHP减少MySQL查询量

|| 我正在用jQuery和PHP构建一个“多人游戏世界”。以下是它的工作方式: 用户角色的位置来自数据库,相应地绘制了用户的位置(位置值为CSS值-左和上) 用户可以使用键盘上的箭头键来移动,从而使用jQuery动画来移动他们的角色。发生这种情况时(每次按箭头键),用户的位置值将插入数据库并进行更新。 为了使这个\“ global \”(用户彼此看到),您需要使用AJAX为每个用户一次全部更新值 我遇到的问题是我需要连续调用我编写的JavaScript函数,该函数连接到MySQL服务器并从数据库表中获取值。而且需要经常通过“ 0”来调用此函数,但是我的主机只是因为超载服务器资源而暂停了我的工作,我认为这是由于我所有的MySQL查询所致。而且即使在反复从数据库中获取值之后,我也必须每隔几秒钟插入一次值,因此我可以想象,如果有足够多的客户端登录,随着时间的流逝将导致崩溃。如何减少正在使用的查询数量?还有另一种方法可以做我需要做的事吗?谢谢。     
已邀请:
就资源使用而言,这基本上与聊天系统相同。尝试搜索,您会发现许多不同的解决方案,包括长轮询和内存缓存之类的概念。例如,检查此线程:扩展聊天应用程序-短轮询与长轮询(AJAX,PHP)     
您应该调查长时间轮询-http://en.wikipedia.org/wiki/Push_technology。此方法允许您与服务器建立连接,然后仅在需要时更新它。但是,从声音的角度来看,如果要每次都进行更新,则可能需要进行大量的工作,您可能想研究另一种存储数据的方式,但是如果您想知道有多少大公司这样做,他们往往会大量服务器为其处理,但它们还将使用类似于长时间轮询的技术。     
您可以使用ѭ1将所有位置存储在内存中,请参阅http://php.net/manual/fr/book.memcached.php,每隔几秒钟一次将所有位置保存到数据库中(如果需要)。     
您可以使用网络套接字来解决此问题。查看此nettuts教程。     
还有另一种方法,它是模拟或使用实际的套接字。您可以将数据通过目前可在Chrome中运行的WebSocket推送(而不是不断检查数据是否有新记录)(至少据我所知,没有在FF4中尝试过),也可以使用Node.js进行精简的长池化。这样,玩家之间的通信将是双向的,而无需使用MySQL存储位置。     
结帐龙卷风 从他们的网站: Tornado是可扩展的无阻塞Web服务器和为FriendFeed提供支持的工具的开源版本。 FriendFeed应用程序是使用类似于web.py或Google \ webapp的Web框架编写的,但具有其他工具和优化功能以利用底层的非阻塞基础结构。 该框架与大多数主流Web服务器框架(当然也包括大多数Python框架)不同,因为它是非阻塞的并且相当快。因为它是非阻塞的并且使用epoll,所以它可以处理数千个同时站立的连接,这意味着它是实时Web服务的理想选择。我们专门构建了Web服务器来处理FriendFeed的实时功能-FriendFeed的每个活动用户都保持与FriendFeed服务器的开放连接。 (有关扩展服务器以支持数千个客户端的更多信息,请参阅C10K问题。)     

要回复问题请先登录注册