前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简易集成websocket技术实现消息推送

简易集成websocket技术实现消息推送

作者头像
呆呆
修改2021-10-09 10:08:55
1.8K0
修改2021-10-09 10:08:55
举报
文章被收录于专栏:centosDai

Websocket

简介

首先介绍下WebSocket,它是一种网络通信技术,该技术最大的特点就是,服务器端可以主动往客户端发送消息;当然,客户端也可以主动往服务器发送消息,实现两端的消息通信,属于网络推送消息技术的一种。

好处

为什么我们需要websocket这门技术呢,通常情况下,我们要想实现类似于消息通知的功能,得主动刷新才能知道是否有新的消息?这样的话,就显得我们的项目很笨重,不灵活。集成了websocket技术的话,消息就能实时刷新,这样对于一些类似于文章点赞,评论等这些实时消息,用户体验感会大大提高。

话不多说,下面看下代码实现

代码实现

pom.xml 首先先添加websocket的依赖(这是spring的)

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>

SpringBoot的如下

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

配置层

代码语言:javascript
复制
@Component
public class WebSocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
    	return new ServerEndpointExporter();
    }
}

业务层

代码语言:javascript
复制
@Component
@ServerEndpoint("/webSocket")
public class WebSocket {

	private Session session;

	//	定义websocket的容器,储存session
    private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>();

	//  对应前端写的事件
    @OnOpen
    public void onOpen(Session session){
        this.session = session;
        webSocketSet.add(this);
        System.out.println("【websocket消息】有新的连接进来了,目标数:"+ webSocketSet.size());
    }

    @OnClose
    public void onClose() {
        webSocketSet.remove(this);
        System.out.println("【websocket消息】有连接断开了,目标数为:"+ webSocketSet.size());
    }

    @OnMessage
    public void onMessage(String message) {
        System.out.println("【websocket消息】收到客户端发送过来的消息:" + message);
    }

    public void sendMessage(String message){
        for (WebSocket webSocket : webSocketSet){
        	System.out.println("【websocket消息】广播消息,message="+ message);
            try {
                webSocket.session.getBasicRemote().sendText(message);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }
	
}

controller层

代码语言:javascript
复制
@Autowired
private WebSocket websocket;
//	在你发送消息(或者实现相关功能的地方)
//  调用websocket的sendMessage方法,将内容代入方法体
websocket.sendMessage("消息内容");

前端页面层

代码语言:javascript
复制
   //	websocket消息通知
   var websocket = null;
   //  判断浏览器是否支持websocket技术
   if('WebSocket' in window) {
       websocket = new WebSocket('ws://127.0.0.1:8080/webSocket');
   }else {
       alert('抱歉,您的浏览器不支持websocket!')
   }

   websocket.onopen = function (event) {
       console.log('建立连接成功')
   }

   websocket.onclose = function (event) {
     console.log('连接已经关闭')
   }

   websocket.onmessage = function (event) {
       console.log('收到消息:' + event.data)
   }

   websocket.onerror = function (event) {
  	   console.log('websocket消息通信发生错误!')
   }
	//  窗口关闭,websocket也就关闭
   window.onbeforeunload = function () {
       websocket.close();
   }

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Websocket
  • 代码实现
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档