Ajax vs Comet(不是聊天应用程序)

时间:2012-05-21 08:01:11

标签: ajax comet

我开发了一个基于Web的应用程序,其中已登录的用户应该向服务器发送消息,告知他每3秒仍然在线。然后,服务器处理该消息,并在Mysql中调用存储过程以将用户的状态设置为online。 我已经研究了比较Comet和Ajax(herehere)的类似问题,但考虑到3秒延迟是可以接受的,并且系统中最大用户1000在线,使用的是Ajax应该使用明智的选择还是Comet?

2 个答案:

答案 0 :(得分:1)

对于这种特征,彗星更合适:

  • 您的客户发送消息(我在线)
  • 您的服务器广播已处理的消息(用户X仍在线)

以ajax方式,您只向服务器提供消息。

以ajax的方式获得“广播效果”。你最终会做类似于彗星的事情,但带宽效率会降低。

的Ajax:

  • 客户端发送服务器 - 我在
  • 服务器进程
  • 服务器发送回用户的客户列表。

在这种情况下,每个客户每3秒钟询问数据库中 COMPLETE “in”列表。

彗星:

  • 客户端X发送服务器 - 我在
  • 服务器进程
  • 服务器向客户端 S 发送用户X仍在线的

在这种情况下,每个客户端每3秒钟告诉服务器他所在的位置。 服务器发送回每个连接的客户端,x仍在

Comet只是向客户端广播和推送消息的技术 Ajax是一种将客户端信息推送到服务器而不必刷新所有页面的技术。

引用维基百科: http://en.wikipedia.org/wiki/Comet_%28programming%29

Comet以其他几个名字而闻名,包括 Ajax Push 反向Ajax ,双向网络,HTTP流媒体和HTTP服务器推送等。

所以去彗星:)

如果你不播放任何东西,那么简单的Ajax是最好的选择

答案 1 :(得分:0)

在这种特殊情况下,由于您不需要从服务器向客户端发送任何信息,我相信Ajax是更合适的解决方案。每三秒钟,客户端告诉服务器它已连接,数据库已更新,并且您已完成。

当然可以使用Comet来完成,在这种情况下,你基本上会ping每个注册的客户端,看它是否仍然连接。但是,您仍然需要在数据库上为每个响应的客户端运行查询,而且您仍然需要客户端在其初始连接上通知服务器。所以,在我看来,Comet会比它的价值更麻烦。唯一可能有意义的是,如果您可以ping每个注册的客户端并将响应存储在内存中,那么一旦所有客户端都被ping了,您就可以运行一个查询来更新其所有状态。一旦客户端断开连接而不是等待超时,这将为您提供额外的好处。不幸的是,这超出了我对Comet的专业知识范围,所以在这一点上,我无法帮助实际实现它。