2012-02-06 50 views
0

所以我的问题是: 通过PHP建立服务器 - 客户端连接的最佳方式是什么? 我的第一种方法(我现在正在使用的方法)是使用AJAX进行操作。 (使用jQuery)服务器到客户端连接使用PHP

更具体一些: 我有一个大堂和一个游戏模式,我的首要任务是聊天和游戏内用户。

我现在正在做的事情:我有一个PHP文件,它为数据库中的每个用户都更新了一个记录,还有另一个文件定期检查这个文件。 (比方说每5秒钟) 这个问题,有很多的mysql调用,大量的ajax调用,有时当ajax无法及时加载时,记录不会及时更新, ergo - >用户断开连接。

请注意,我需要这个用于我的论文,所以我有时间做这个作业,即使你给我一些链接。

任何答案和提示,欢迎您! 在此先感谢。

回答

0

您可以从设置AJAX调用的时间限制开始,并通过仔细检查来处理任何错误,而不是断开用户的连接。

每五秒一次通话并不是那么多,真的。

+0

好的,所以我使用Ajax来检查游戏中的用户,但也用于聊天,以及在大厅中和游戏之后发生的任何事件。 同时在不同的游戏和游说中有很多用户,仍然不会太多? – ZeeCoder 2012-02-24 15:03:11

0

你可以看看Comet,它使用“长轮询”保持连接打开,允许没有轮询的通信。

问题是,这需要服务器上的更多资源,因为它可能必须同时打开大量连接。如果您使用的是多服务器的托管服务器,则管理状态可能会令您头疼,因为您需要将用户绑定到单个IP /服务器或跨服务器管理状态。你正在为一套资源换取另一套资源。

您可能需要考虑的一件事(Coment除外)与DB存储器保持一致,其中包括REDISMEMCACHED以大大提高数据库性能。

0

一种替代方法是使用共享存储器 - PHP: Semaphore, Shared Memory and IPC
潜在的问题可能是系统施加的共享内存的限制。此外,访问共享资源可能会变得复杂,因为您必须确保它们有防备同时读/写的功能。但是,这应该比使用数据库更快。数据可以每分钟或半分钟刷新一次DB等。

如果游戏模式每秒钟需要大量的请求/响应,那么创建一个单独的程序来处理游戏逻辑将是一个更好的解决方案,而不是使用PHP。
另一种选择是使游戏有状态(如果可能的话)。