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

Posted

技术标签:

【中文标题】Ajax vs Comet(不是聊天应用程序)【英文标题】:Ajax vs Comet (not a chat application) 【发布时间】:2012-05-21 08:01:11 【问题描述】:

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

【问题讨论】:

正如您所描述的,您需要每 3 秒将数据从客户端发送到服务器。因此,您可以根据需要使用 AJAX。每当您想将信息从服务器推送到信息可用性未知的客户端时,您可以考虑 Comet。 web socket 不是一个选项,因为应用程序应该能够在 IE 上运行 如果您对使用 WebSocket 感兴趣,请查看Socket.IO,它或多或少在不存在的浏览器(例如 IE)中模拟了 WebSocket 协议。 【参考方案1】:

对于彗星这种特征比较合适:

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

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

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

阿贾克斯:

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

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

在彗星中:

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

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

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

引用***: http://en.wikipedia.org/wiki/Comet_%28programming%29

Comet 还有其他几个名字,包括 Ajax PushReverse Ajax、双向网络、HTTP 流和 HTTP 服务器推送等。

所以去彗星吧:)

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

【讨论】:

服务器没有向客户端广播任何内容。它只是在客户端收到消息时调用 Mysql 中的一个过程。该过程基本上是一条 SQL 语句。 那么ajax更合适【参考方案2】:

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

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

【讨论】:

以上是关于Ajax vs Comet(不是聊天应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 长轮询限制

反向Ajax,实现服务器向客户端推送消息之 Comet

WEB消息推送-comet4j

AJAX Comet - Microsoft 是不是正在开发或支持任何解决方案以使其具有可扩展性?

ajax短轮询+php与服务器交互制作简易即时聊天网站

《JAVASCRIPT高级程序设计》Ajax与Comet