Web即时消息通知的实现
Web即时消息通知,可以使用轮询,长轮询和SSE或Socket。比较成熟的方法是长轮询,SSE和Socket都受到客户端或服务器端的约束。
本文以长轮询为主题简介如何实现长轮询。
- 将消息抽象为Message:Name Data 和Id,Name必须,Data和Id可选。
- 使用im订阅服务器的消息。参数包含a|b&c,其中a|b是为历史消息提供消息版本。c为确认消息。
- 客户端自定义消息处理,默认有message消息和error消息,分别处理成功或失败消息。
以下是客户端代码:
$.im = function (url, options) {
this.stop = true;
this.url = url;
this.options = options;
this.ack = [];
this.events = new Array();
this.on = function (event, callBack) {
this.events[event] = callBack;
}
this.onmessage = function (callBack) {
this.on("message", callBack);
}
var query = function () {
if (this.stop) {
return;
}
var url = this.url + "?c=" + this.ack.join(",");
$.ajax({
url: url,
type: 'get',
dataType: "json",
contentType: "application/json",
success: function (data) {
this.query();
if (data.id) {
this.ack.push(data.id);
}
if (this.events["message"]) {
this.events["message"](data);
}
},
error: function (data) {
this.query();
if (this.events["error"]) {
this.events["error"](data);
}
}
});
}
this.start = function () {
this.stop = false;
query();
}
this.stop = function () {
this.stop = true;
}
this.emit = function (event, data) {
this.events[event](data);
}
return this;
};
var im = $.im("http://api.abc.com/test", {});
im.onmessage(function (data) {
alert(data.id);
alert(data.data);
})
im.on("myevent", function (data) {
alert(data.id);
alert(data.data);
});
im.start();
im.stop();
im.emit("message", { id: 1, data: "message" });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)