分享好友 最新动态首页 最新动态分类 切换频道
基于websocket实现在线聊天
2024-12-26 15:44

因为http 通信只能由客户端发起,服务器返回查询结果,HTTP 协议做不到服务器主动向客户端推送信息, 服务器有连续的状态变化,客户端要获知就非常麻烦。 我们只能使用轮询:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。 轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开);

websocket介绍

WebSocket是一种在单个TCP连接上提供全双工通信的协议,它允许客户端和服务器之间进行实时数据传输。与传统的HTTP通信方式不同,WebSocket允许服务器主动向客户端推送数据,而不需要客户端先发起请求。

特点和优势
  1. 全双工通信:WebSocket允许客户端和服务器之间同时发送和接收数据,支持实时性更强的应用场景,如在线聊天、实时通知等。

  2. 更低的延迟:与轮询和长轮询相比,WebSocket减少了每个消息的头部开销,提供了更低的延迟。

  3. 节省带宽和服务器资源:WebSocket连接建立后,客户端和服务器之间的通信通过较少的控制开销和更高的吞吐量进行,节省了带宽和服务器资源。

  4. 支持跨域通信:WebSocket可以通过浏览器的标准API实现跨域通信,提供了更加安全和便捷的方式。

    maven依赖: <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1<[胜利]ersion> </dependency>

    前端初始化工作代码

            initWebSocket() {
                    // 获取当前页面的协议、主机和端口
                    const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
                    const host = window.location.host;
                    const endpoint = '/websocket_war/echo';
              // 动态生成 WebSocket 的 URL
                const wsUrl = `${protocol}//${host}${endpoint}`;
                console.log(wsUrl);
                // 创建 WebSocket 连接
                var ws = new WebSocket(wsUrl);
            ws.onopen = function () {
                console.log('WebSocket 连接已经建立。');
                // ws.send('Hello, server!');
            };
    ​
            ws.onmessage = function (event) {
                console.log('收到服务器消息', event.data);
            };
    ​
            ws.onerror = function (event) {
                console.error('WebSocket 连接出现错误', event);
            };
    ​
            ws.onclose = function () {
                console.log('WebSocket 连接已经关闭。');
            };
    ​
            window.onbeforeunload = function() {
                app.$data.ws.close();
            };
    ​
            this.ws = ws;
        }

    后端代码

    import javax.websocket.*;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
     
    @ServerEndpoint("/echo")
    public class AdminEchoServer {
        private static Session session;
     
        @OnOpen
        public void onOpen(Session session) {
            System.out.println("WebSocket 连接已经建立。");
            AdminEchoServer.session = session;
        }
     
        @OnMessage
        public void onMessage(String message, Session session) throws IOException {
            System.out.println("收到客户端消息" + message);
            //session.getBasicRemote().sendText("服务器收到消息" + message);
        }
     
        @OnClose
        public void onClose() {
            System.out.println("WebSocket 连接已经关闭。");
        }
     
        @OnError
        public void onError(Throwable t) {
            System.out.println("WebSocket 连接出现错误" + t.getMessage());
        }
    ​
        public void send(String message) throws IOException {
            session.getBasicRemote().sendText(message);
        }
    ​
    }

建议将聊天的内容存储到redis中的有序集合中,利用时间戳作为有序集合的分数

最新文章
排列三2023119期正藏机图诗汇总
119期:体一位培训再上岗二位心软莫掌权三位竹签与牛肚和值:谮忌语:剪影看不出丑来118期:体一位总参和总政二位飞刀有预谋三位纪念白求恩和值:京忌语:送往迎来阿庆嫂117期:体一位五岳看嵩山二位飞鱼浪里钻三位嫁给周公瑾和值:财忌语:二
极简图床 + 阿里云OSS 做图片外链
Typora图床搭建阿里云OSS的步骤如下:1. 首先,登录阿里云账号并打开OSS控制台。2. 创建一个新的存储空间(bucket),用于存放Typora上传的图片。3. 在存储空间(bucket)设置中,找到权限管理,确保该存储空间(bucket)的访问权限设置为公共读
网站降权半年终于逐渐恢复排名(爱搜博客SEO总结)
大家也应该关注到本博客网站最近的seo增长变化,正如本文标题所示爱搜博客网站被百度降权半年至今终于逐渐恢复排名,本文就把整个网站降权过程总结归纳成seo优化经验分享给各位seo同行朋友。一直以来本博客都是有比较高权重值的,最高达到
用AI生成超逼真美女写真,体验最新AI绘图神器!
步骤3: 提供描述在相应的文本框中写下你想生成的形象描述,比如发型、表情、穿着等等,越详细的描述会使生成结果更加符合你的期望。步骤4: 调整参数根据个人喜好,可以调整图像的风格、色调、细节等参数。若不确定,可以直接使用系统推荐的
美国监管机构寻求分拆bb0,迫使谷歌出售Chrome
MICHAEL LIEDTKE,美联社科技撰稿人美国监管机构希望一名联邦法官分拆谷歌,以防止该公司继续通过其占主导地位的搜索引擎压制竞争。此前一家法院发现,谷歌在过去十年中一直处于滥用垄断地位。美国司法部(Department of Justice)周三晚间
打击利用AI仿冒名人营销!微信已关闭账号209个
转自:北京日报客户端12月15日,腾讯官方平台“微信珊瑚安全”公众号发布公告。据悉,微信平台打击了一批利用AI仿冒知名人士进行不当营销、恶意博取流量的违规行为,截至目前,累计处置内容532条,关闭账号209个。伴随AI技术的飞速发展,互
直通车时间溢价人群折扣怎么算?时间折扣设置原则是什么?
直通车相信各位商家应该都是知道的,因为作为推广方式,直通车是被大家使用的比较多的,但是有极大一部分商家只是盲目的跟风,对于直通车车并不了解,那么直通车时间溢价人群折扣怎么算呢? 一、直通车时间溢价人群折扣怎么算? 1、淘宝直通
UAndroidTool安装了打不开 uandroidtool登录不了
测试android模拟器上网问题,搜索网络发现4中处理解决方法 本人在家测试,不用任何处理直接可以浏览自带浏览器以及自己下载的赶集网应用程序。 公司网络不知道为什么,询问过网络管理员,给的答复是没有使用过代理服务器,网上很多帖子也说
璟雲里别墅房价-上海青浦璟雲里2025官网-璟雲里百度百科-评测!
璟雲里别墅房价-上海青浦璟雲里2025官网-璟雲里百度百科-评测!“璟雲里”二期毫不夸张的说,“璟雲里”二期从地段站位、生态环境、价值潜力、配套资源、产品力等全方位领先的新房项目。俗话说“人生有别,一墅为界”!但,居可求,墅难得
相关文章
推荐文章
发表评论
0评