CometD技术通过Http长轮询(或websocket长链接)方式在服务器与客户端之间构建了一条交互的链路。它们都遵守Bayeux协议,交换的消息是Bayeux message,消息格式是JSON。
当用户登录后,后台根据用户订阅把最新的信息反推给web客户端,展示在页面上。CometD服务器实现的具体思路如下:当网页客户端登陆后,服务器创建自定义通道(group/user), 然后接收网页客户端的订阅,当后台有数据更新时,后台服务器对数据进行分析,发送给指定的用户。相关示意图如下:

CometD服务器继承服务实现自org.Cometd.server.AbstractService。对应的JAVA服务器代码如下:
- public class BayeuxService extends AbstractService {
-
- //创建固定的channel
- public BayeuxService(BayeuxServer bayeux) {
- super(bayeux, "cometdServer");
- BayeuxService.bayeux=bayeux;
- addService(LOGIN_CHANNEL, "clientLoginCB");
- addService(TRANSDATA_CHANNEL, "JavaClientTransCB");
- }
-
- public void clientLoginCB(ServerSession _session, Message message){//定义回调函数
-
- }
- }
以上代码创建2个通道,一个网页客户端的登录通道(LOGIN_CHANNEL),一个是接收后台数据的通道(TRANSDATA_CHANNEL)。 "clientLoginCB"是网页客户端登陆的处理函数, "JavaClientTransCB" 是后台发布数据的处理函数。
当用户登录时,将自己的组id和用户id拼接成格式为“/groupxxx/userxxx”的字符串,然后发布到LOGIN_CHANNEL上去,对应的网页JS代码如下:
- $.cometd.publish(LOGIN_CHANNEL,{
-
- },function(publishReply){
-
- })
- Bayeux服务器收到“/groupxxx/userxxx”字符串后,会为该网页客户端创建名为“/groupxxx/userxxx”的通道,并且服务器和客户端都会订阅这个通道以便接收对方发出的信息。
- 网页JS代码:
- $.cometd.subscribe(“/groupxxx/userxxx”,function(){
-
- })
2.3、网页客户端订阅
网页客户端登录之后,需要向服务器发送需要订阅的数据,对应的网页JS代码如下:
- $.cometd.publish(“/groupxxx/userxxx”,{
-
-
相关阅读:
【小记】与指针和二维数组过几招
TLA+学习记录1——hello world
阿里技术面总结
前后端分离不可忽视的陷阱,深入剖析挑战,分享解决方案,助你顺利实施分离开发。
【蓝桥杯选拔赛真题17】C++时间换算 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
【图论】最小生成树(python和cpp)
sftp上传下载文件实现
张瑞敏荣登世界管理思想家名人堂
MySQL高级SQL语句
SQL注入漏洞解析--less-7
-
原文地址:https://blog.csdn.net/chenlycly/article/details/126333470
-
最新文章
-
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU