首页 > 其他分享 >Web即时消息通知的实现

Web即时消息通知的实现

时间:2024-01-24 13:57:44浏览次数:27  
标签:function Web 即时消息 url 通知 stop im data events

Web即时消息通知,可以使用轮询,长轮询和SSE或Socket。比较成熟的方法是长轮询,SSE和Socket都受到客户端或服务器端的约束。

本文以长轮询为主题简介如何实现长轮询。

  1. 将消息抽象为Message:Name Data 和Id,Name必须,Data和Id可选。
  2. 使用im订阅服务器的消息。参数包含a|b&c,其中a|b是为历史消息提供消息版本。c为确认消息。
  3. 客户端自定义消息处理,默认有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" });

 

标签:function,Web,即时消息,url,通知,stop,im,data,events
From: https://www.cnblogs.com/zhumingwu/p/17984516

相关文章

  • 使用Java编写RESTful Web服务
    RESTfulWeb服务是一种基于HTTP协议的软件架构风格,它使用不同的HTTP方法(如GET、POST、PUT、DELETE等)来执行不同的操作,并使用统一的接口来访问和操作资源。在Java中,有多种框架可用于编写RESTfulWeb服务,其中最流行的是SpringBoot和Jersey。以下是使用SpringBoot编写RESTfulWeb服......
  • WebStorm 没有找到本地修改记录LocalChanges,怎么查看本地修改记录
    一直用IDEA做后端Java开发,也写过vue+elementUI的前端代码,但前后端都放在一个项目里写,本地修改代码记录,可以在git-LocalChanges中查看修改记录。 最近前后端分离,自己需要单独用WebStorm写前端项目代码,在git里就找不到本地修改记录了,如下图:File-->Setting-->VersionControl......
  • 华为eNSP中防火墙web登录方法附带USG6000V镜像安装包(超级详细附步骤图)
    华为eNSP中防火墙web登录方法(超级详细附步骤图)在ensp中使用防火墙,我们选择USG6000V在启动防火墙时,会提示导入镜像文件,选中镜像文件打开即可(镜像安装包链接:https://pan.baidu.com/s/15Szr2za9apdQfQ7Tremzeg?pwd=dmfv提取码:dmfv)搭建环境:在cloud中选择网卡,可以选择虚拟......
  • websocket
    本文由简悦SimpRead转码,原文地址juejin.cn通过观察我的更新频率,你可能会得出我是一个鸽子的结论。不过请听我狡辩一下。最近我沉迷于编写服务器端的应用,因为虽然我们说Android使用Java,但实际上还有一些小技巧。今天,我决定痛改前非,并为大家带来一篇关于AndroidWebSocket的......
  • uniapp打包h5在Android的webview中打开出现localStorage.setitem为null的记录
    使用android直接打开h5的链接,报错localStorage.setItem为null原因是要打开Android的webview的存储设置valwebView=findViewById<WebView>(R.id.webview)valsettings=webView.settingssettings.domStorageEnabled=truesettings.datab......
  • 在Android中的webview进行调试网页
    首先要在代码中打开webview的设置,注意这里WebView是大写的,这个setWebContentsDebuggingEnabled方法是WebView的静态方法,不是你的webview的对象的方法。这个代码放到你的webview的activity的onCreate中if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT){......
  • web自动化测试复习巩固第一天
    selenium三大组成部分官网地址:http://www.selenium.dev seleniumide:firefox/chrome/edge安装插件不要30分钟就能学会,是个录制工具。seleniumwebdriver:第三方库。结合编程语言才能用。python/java/javascript/c#等。seleniumgrid:配置化。分布式的配置。同样的代码在不同......
  • KnightCTF 2024 WEB做题记录
    WEBLeviAckerman题目信息LeviAckermanisarobot! N:B:Thereisnoneedtodobruteforce. Author:saifTarget:http://66.228.53.87:5000/我的解答:签到题,题目提示了robot!直接访问robots.txt得到路径Disallow:/l3v1_4ck3rm4n.html再次访问路径得到flagK......
  • Java web的过滤器Filter
    注:来自《JavaWeb入门经典》一书,仅供参考和学习。1.过滤器的核心对象2.创建并配置过滤器......
  • 浅析vue cli的webpack配置属性 devServer 详解 和 devServer.proxy 工作原理解析
    浅析vuecli的webpack配置属性devServer详解和devServer.proxy工作原理解析:https://blog.csdn.net/qq_47443027/article/details/125985081?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-125985081-blog-127746519.235^v......