在线聊天 - Ajax民意调查或反向Ajax

时间:2010-06-30 22:20:33

标签: ajax apache comet

经过一整天的搜索后,我想谈谈在线聊天的最佳解决方案。

这就是我所知道的:

Ajax poll是一种旧的,带宽消耗且不可扩展的方式。它每X秒向服务器发出一个新数据请求。这意味着每X秒进行一次数据库查询* number_of_connected_users。

反向Ajax及其应用程序之一(comet)需要一个定制的Web服务器或专用的彗星服务器,它可以处理number_of_connected_users长时间的http连接数量。

我的实际服务器是:1个Xeon CPU,1 GB RAM和1 Gb / s带宽。服务器是虚拟机(因此具有高度可扩展性)。

我需要一个可以随服务器和未来不断增长的用户群扩展的解决方案。

我的怀疑是:

  • ajax轮询方法对我的带宽使用有多大影响?

  • 我可以通过哪种方式优化ajax轮询,仅在必要时才进行数据库查询?

  • 彗星服务器可以在网络服务器(Apache)的同一台机器上运行吗?

  • 使用彗星的方式,我仍然需要一个间隔来对数据库进行查询,然后发送响应,那么实时在哪里?

  • 使用我的实际服务器,彗星方式可以工作吗?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果你可以逃脱,你永远不应该使用民意调查。它阻塞了服务器和客户端上的资源。服务器必须通过轮询进行更多数据库请求,更多检查以查看数据是否已更改。

ajax轮询方法还会生成更多不必要的请求。通过轮询,您可以使用内存和CPU。 Comet(如果操作正确)仅使用内存。

彗星服务器可能无法在Apache下运行。 Apache似乎不是为长时间运行的请求而设计的。我建议用ruby(使用EventMachine)an example,Python(使用Twisted)或C语言实现你的彗星服务器。

我不明白为什么你需要有间隔来进行数据库查询。当您进行更改时,您可以告诉您的彗星服务器通知必要的用户该更改。

答案 1 :(得分:0)

我正在用PHP编写我的网站。

那么,我需要运行一个服务器(如扭曲)并在python中编写我的聊天应用程序? 这个应用程序应该处理传入的ajax请求并将新数据推送到客户端。

如果我理解得很好,这种方法不需要数据库,对吗?