我很想将服务器端事件的支持添加到CppCMS。我理解该怎么做的技术部分 通信级别:客户端发送长轮询XmlHTTPRequest,并等待响应, 服务器接受连接,并且在服务器端事件发生并发送之前不响应 对客户的回应。客户重复该程序。
但是,对于大多数Web开发人员来说,这个级别太低了。有很多问题:我如何管理事件,如何管理连接等。
我想到了两种可能的模型:
定义了一些命名事件和服务器端, 例如“134号聊天室的新消息”; 当请求接受服务器端应用程序检查消息时 在房间里(例如在DB中)并且如果客户端没有新消息 它订阅了事件并等待它。
当其他客户端将数据发布到服务器时,它会通知所有应用程序 “聊天室内没有134的新消息”事件,他们醒来并发送这些消息 对客户等等。
这个模型看起来仍然很“低级”模型,但它隐藏了所有模型 通知方法。
另一种选择是定义一些命名队列,因此每个客户端都会创建这样的队列 连接到服务器时排队并等待新消息。当一些客户 将新消息发布到“聊天室号134”,在服务器端进行广播 连接到此“Chat Room no 134”的所有队列,并传递消息 对客户。
然而,有许多问题已经出现:
在服务器端创建一个粘合服务器端事件的持久对象 和用户方事件。它可以通过不同的XHR请求进行通信 重定向到它。
因此客户端(JavaScript)使用XHR注册事件并等待它们 和服务器端调度事件通知,直到页面重建。
所以,我想知道,最受欢迎和推荐的是什么 服务器端推送技术背后的API模型?
由于
修改:添加了第三个选项
答案 0 :(得分:3)
试试Bayeux,这非常像你的第一个模特。客户端订阅到频道“chatroom / new-message / 134”。如果有新的消息,服务器将广播给订阅者。
您可以使用通配符通道名称订阅多个房间“chatroom / new-message / *”(仅限跟踪)
答案 1 :(得分:3)
您应该查看XMPP PubSub,它定义了XMPP上的通用发布/订阅协议。还有一个XMPP extension called BOSH(较低级别的协议详细信息在XEP-0124中单独记录),它定义了一种允许HTTP客户端使用长轮询(即comet)绑定到XMPP服务器的机制。结合这两个规范,您可以使用彗星为Web应用程序提供强大的事件订阅模型。即使你最终没有使用XMPP / BOSH,这些规范也包含了对如何构建这种系统的一些有价值的见解。
如果你最终使用XMPP和BOSH,这里有一些你可能会觉得有用的工具:
不可否认,这是一个非常重量级的解决方案,它可能不适合您的特定应用,但很多想法都被纳入这些标准,因此它们可能会有所帮助。
答案 2 :(得分:0)
没有适用于所有应用程序的通用解决方案。如果您想了解一些常规模式,请查看事件驱动的体系结构。
我参加的演示文稿中有一些slides在线(这是该主题的高级视图)。