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 Push、Reverse Ajax、双向网络、HTTP 流和 HTTP 服务器推送等。
所以去彗星吧:)
如果你不广播任何东西,那么简单的 Ajax 是最好的选择
【讨论】:
服务器没有向客户端广播任何内容。它只是在客户端收到消息时调用 Mysql 中的一个过程。该过程基本上是一条 SQL 语句。 那么ajax更合适【参考方案2】:在这种特殊情况下,由于您不需要从服务器向客户端发送任何信息,我相信 Ajax 是更合适的解决方案。每隔三秒,客户端就会告诉服务器它已连接,数据库更新,您就完成了。
当然可以使用 Comet 完成,在这种情况下,您基本上会 ping 每个已注册的客户端以查看它是否仍然连接。但是,您仍然需要为每个响应的客户端在数据库上运行查询,而且您仍然需要客户端在其初始连接时通知服务器。所以,在我看来,彗星会带来更多的麻烦而不是它的价值。唯一可能有意义的是,如果您可以 ping 每个注册的客户端并将响应存储在内存中,那么一旦所有客户端都被 ping 通,您就可以运行一个查询来更新它们的所有状态。这将为您提供额外的好处,即在客户端断开连接时立即知道,而不是等待超时。不幸的是,这超出了我对 Comet 的专业知识范围,所以在这一点上,我无法帮助实际实施它。
【讨论】:
以上是关于Ajax vs Comet(不是聊天应用程序)的主要内容,如果未能解决你的问题,请参考以下文章