我在userend pullstyle上用JQUERY写了一个PHP chatscript。它每秒重新加载一次pull.php页面,并且自上次检查后仅从我的sql数据库中检索新的聊天记录。
但是我收到了主持人发来的一封电子邮件,说我使用了太多的带宽。的Bleh。我的聊天工作就像我想要的那样,这发生了。我害怕做一个COMET php聊天,因为我被告知它使用一个单独的进程或线程foreach用户。
我想我只需要一个比我更好,更有效的策略。
答案 0 :(得分:5)
嗯,你有这个前提。 1秒钟的召回过于频繁 - 任何人都可以在一秒内敲响答案并期望它能够通过吗?我需要至少2秒才能收到我的SO消息/相对错字。
所以第1部分 - 增加召回时间。你把它踢了10秒钟,应用程序仍然会感觉非常快,但你的处理速度降低了10倍 - 这是巨大的。请记住,每条消息都包含额外数据(在HTML中以及支持它的所有网络层中),服务器收到的每条消息都需要处理以决定如何处理它。
第2部分 - 您可能希望引入交互速度的滑动比例。当用户没有打字并且在一段时间内没有收到消息时,重新检查率可以降低到大约30秒。如果用户在“拉”中接收到多个消息或者已经接收到最后3次连续拉动的消息,则速度应该增加(可能甚至更频繁地超过10秒)。在谈话过程中,用户会感觉很快,而在没有任何进展的情况下,这种情况不会缓慢/滞后。
第3部分 - 听起来你已经在做了,但是你应该提供尽可能少的回复。这只是用于呈现新消息的HTML片段,或者甚至可能只是可以由客户端JavaScript呈现的JSON结构。如果您再次收到所有邮件(不良)或整个页面(更糟),您可以通过这种方式严重降低带宽。
第4部分 - 您可能希望查看备用服务器软件。 Apache有一些严重的开销......这是有充分理由的,你已经运行了所有的插件,apache配置,.htaccess配置,重写,厨房水槽 - 你可能能够切换到更轻的http服务器 - nginx ,lighttp - 并且实现了一些严重的性能提升(严格来说,它对带宽没有多大帮助 - 但是人们不禁要问主机是真的在抱怨,还是你的服务消耗了大量的服务器资源)。
第5部分 - 你可以看看切换主机或包 - 我确信这是一个可怕的想法,但是可能有更多带宽/处理器的包(后来我怀疑更关键)可用......你甚至可以移动到您自己的服务器,这样您就可以在没有服务提供商参与的情况下做您想做的事情。
答案 1 :(得分:0)
您不需要每秒检查一条新消息,将其推迟到3或4.确保您只使用1个查询并且加载的文件尽可能小。并且我总是会添加一个超时...它会在一分钟或两分钟没有活动后停止重新加载。
进行这些更改并查看它的位置。
如果您想查看我们是否可以提供帮助,请发布一些代码。
答案 2 :(得分:0)
我相信彗星是唯一的解决方案。
线程比进程轻得多,因此您可能希望将COMET类型技术与lighthttpd等轻型线程Web服务器一起使用。
答案 3 :(得分:0)
看看Simple Chat。我觉得它非常小,可扩展。
答案 4 :(得分:0)
您需要做的就是“继续使用其中一种标准解决方案”....
Comet,Web Socket,XMPP是你现在会听到的几个词然后,只需选择其中一个,它应该比基于php聊天的经典周期性ajax调用更有效。
如果您想继续使用基于PHP和jQuery的解决方案,请尝试使用XMPP的基于浏览器的聊天系统的这两个工作示例:http://bit.ly/jaxlBoshChat(对于一对一聊天示例)和http://bit.ly/jaxlBoshMUC (对于多用户聊天示例)。如果你在设置它们时遇到任何问题,请告诉我。