分享好友 最新动态首页 最新动态分类 切换频道
基于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中的有序集合中,利用时间戳作为有序集合的分数

最新文章
2024网鼎杯web1+re2 wp
这两道题属于比较简单的,顺道说一下,今年的题有点抽象,web不是misc,re不是web的,也有可能时代在进步,现在要求全栈了吧 web1 最开始被强网的小浣熊带偏思路了,进来疯狂找sql注入,
AI生成美女写真:超简单的全新体验!
在这个科技飞速发展的时代,AI技术已经深入我们生活的方方面面,尤其是在图像生成领域。你有没有想过,只需简单几步,就能制作出如同专业摄影师拍摄的美女写真?这真是一件令人兴奋的事情!无论是为了社交媒体的展示,还是为了个人的艺术创
CAD/CAE的区别与系统发展
1.前言  设计分析一体化是目前所有公司追求的一个主要目标,其核心意图就是为了实现在设计过程中,充分考虑产品的性能和优化,提升产品质量和改善产品性能。  2.几个重要概念及其误区  a)什么是CAD?  CAD,即计算机辅助设计(Comput
ai智能logo生成器推荐
如今,AI智能技术在各个领域得到了广泛应用。在设计领域,AI智能Logo生成软件成为设计师们的新宠。在设计一个成功的品牌Logo时,创意和专业性都非常重要。然而,对于许多设计师来说,时间和资源是宝贵的。这就是为什么AI智能Logo生成软件的
AI绘画神器:一键生成超逼真美女写真,轻松实现你的数字化梦想!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 生活中,我们或许常常幻想有一款工具,能够将我们的脑海中的绘画理念瞬间化为现实,尤其是想
2024年淘宝免费推广神器排行榜
下面给大家推荐几款好用的免费的淘宝推广软件,有需要的小伙伴们来了解一下。淘宝推广大师是一款专业的淘宝客推广软件,提供了多种高效推广方法,可以帮助淘宝客获得更多的成交客户。该软件分为本地和网络优化两个主要功能,能够通过专业的
2025独立站还能做吗为什么操作
在数字营销的海洋中,独立站如同一艘扬帆远航的帆船,承载着无数创业者的梦想与挑战。随着互联网技术的飞速发展,独立站已经成为跨境电商的重要阵地。面对市场的不断变化和竞争的加剧,许多独立站运营者开始质疑:2025年的今天,独立站是否
4398游戏盒子APP功能介绍
4398游戏入口是一款让千万玩家们玩到无比开心的游戏APP。简约清新的游戏界面,各种趣味好玩的游戏玩法,玩家们可以在这个游戏平台之中,开始你的完美击杀体验,简单畅享的游戏操作,只要你想玩的这里都有哟,真实互动的社交大平台,玩家们
58同城怎么挂店面转让
在如今的商业环境中,店面转让是一种常见的商业行为。为了帮助商家更好地进行店面转让,58同城提供了一个便捷的平台。以下是关于如何在58同城上发布店面转让信息的详细步骤和注意事项。首先,确保你已经注册并登录了58同城账号。如果还没有
Android 文件系统获取root权限
     最近在移植android2.3到s3c6410平台,文件系统成功挂载后,在超级终端执行一些命令不成功,比如mkdir,这样的基础命令,后来查阅资料,是自己没有取得root权限,只需在启动的shell时,指定该程
相关文章
推荐文章
发表评论
0评