首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器推送技术(COMET)的API模型

服务器推送技术(COMET)的API模型
EN

Stack Overflow用户
提问于 2009-08-02 06:32:11
回答 3查看 1.6K关注 0票数 2

我想在CppCMS中添加对服务器附带事件的支持。我了解在通信级别上应该做什么的技术部分:客户端发送长轮询XmlHTTPRequest,等待响应,服务器接受连接,直到服务器端事件发生并将响应发送给客户端。客户端重复此过程。

然而,对于大多数web开发人员来说,这太“低”了。有很多问题:我如何管理事件,如何管理连接等等。

我想了两种可能的模型:

  1. 有一些已定义的命名事件和服务器端,例如“聊天室中的新消息第134号”;当请求被接受时,服务器端应用程序将检查房间中的消息(例如DB),如果没有新的消息提供给它订阅并等待它的客户端。 当其他客户端向服务器发布数据时,它会通知所有应用程序“聊天室中的新消息第134号”事件,这些应用程序醒来后会将这些消息发送给客户端,等等。 这个模型看起来仍然是相当“低级”的模型,但是它隐藏了所有的通知方法。
  2. 另一个选项是定义一些命名队列,因此每个客户端在连接到服务器时创建这样的队列,并等待新消息。当某些客户端向“聊天室第134号”发送新消息时,服务器端将广播到连接到“聊天室第134号”的所有队列,并将消息传递给客户端。 然而,出现了许多问题:
代码语言:javascript
复制
- How do I manage queues and the session level, at the level of single page?
- How do I delete queues and create timeouts on them?
- What happens if more then one "window" subscribes to same queue?

  1. 在服务器端创建一个持久对象,该对象在服务器端事件和用户端事件之间粘合。它可以通过重定向到它的不同的XHR请求进行通信。 因此,客户端( client,JavaScript)注册事件,并使用XHR和服务器端分派的事件通知等待它们,直到页面重建。

所以,我想知道,服务器端推送技术背后最流行和推荐的API模型是什么?

谢谢

编辑:添加了第三个选项

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-11 23:39:51

您应该签出XMPP PubSub,它在XMPP上定义了一个通用的发布/订阅协议。还有一个XMPP扩展称为BOSH (在XEP-0124中单独记录了较低级别的协议细节),它定义了一种机制,允许HTTP客户端使用长轮询(即彗星)绑定到XMPP服务器。将这两种规范结合起来,可以为使用comet的web应用程序提供一个健壮的事件订阅模型。即使您最终没有使用XMPP/BOSH,规范也包含了一些关于如何构建此类系统的宝贵见解。

如果您最终使用了XMPP和BOSH,以下是一些您可能会发现有用的工具:

  • StropheJS:用于编写讲BOSH语言的客户端XMPP客户端的库。
  • 伊达沃尔:XMPP服务器的通用发布-订阅服务组件。
  • 旁遮普:一个BOSH连接管理器,充当BOSH HTTP客户端和您的XMPP服务器之间的“转换代理”。

诚然,这是一个非常重的解决方案,它可能不适合您的特定应用程序,但在这些标准中进行了大量的思考,因此它们可能会有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2009-08-10 14:45:29

试试贝尤克斯,它非常像你的第一个型号。客户端订阅频道“聊天室/新消息/134”。如果有新消息,服务器将向订阅者广播。

您可以使用通配符通道名订阅多个房间“聊天室/新消息/*”(仅尾随)

票数 3
EN

Stack Overflow用户

发布于 2009-08-10 15:44:46

没有适用于所有应用程序的通用解决方案。如果您想了解一些通用模式,请看一下事件驱动的架构

有一些来自我参加过一次演讲的幻灯片在线(这是一个相当高层次的主题视图)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1218292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档