【发布时间】:2010-11-16 03:21:37
【问题描述】:
我正在向CppCMS 添加对服务器端事件的支持。我了解在 通信级别:客户端发送长轮询 XmlHTTPRequest,并等待响应, 服务器接受连接并且在服务器端事件发生并发送之前不响应 对客户的回应。客户重复该过程。
但是,对于大多数 Web 开发人员来说,这太“低”了。有很多问题:如何管理事件、如何管理连接等等。
我想到了两种可能的模型:
-
定义了一些命名事件和服务器端, 例如“134 号聊天室中的新消息”; 当请求被接受时,服务器端应用程序检查消息 在房间里(例如在数据库中),如果没有新消息给客户端 它订阅事件并等待它。
当其他一些客户端向服务器发送数据时,它会通知所有应用程序 “134 号聊天室中的新消息”事件,他们醒来并发送这些消息 给客户等等。
这个模型看起来仍然很“低级”的模型,但它隐藏了所有 通知方法。
-
另一种选择是定义一些命名队列,所以每个客户端都会创建这样的 在连接到服务器时排队并等待新消息。当一些客户 向“134 号聊天室”发布新消息,在服务器端广播 到连接到这个“134 号聊天室”的所有队列,并且消息被传递 给客户。
但是有很多问题被提出:
- 如何在单页级别管理队列和会话级别?
- 如何删除队列并为其创建超时?
- 如果多个“窗口”订阅同一个队列会怎样?
-
在服务器端创建一个持久对象,该对象在服务器端事件之间粘合 和用户端事件。它可以通过不同的 XHR 请求进行通信,这些请求是 重定向到它。
所以客户端 (JavaScript) 注册事件并使用 XHR 等待它们 和服务器端发送事件通知,直到页面被重建。
所以,我想知道什么是最受欢迎和推荐的 服务器端推送技术背后的 API 模型?
谢谢
编辑:添加第三个选项
【问题讨论】:
标签: api model comet server-push