简易集成websocket技术实现消息推送
Websocket
简介
首先介绍下WebSocket,它是一种网络通信技术,该技术最大的特点就是,服务器端可以主动往客户端发送消息;当然,客户端也可以主动往服务器发送消息,实现两端的消息通信,属于网络推送消息技术的一种。
好处
为什么我们需要websocket这门技术呢,通常情况下,我们要想实现类似于消息通知的功能,得主动刷新才能知道是否有新的消息?这样的话,就显得我们的项目很笨重,不灵活。集成了websocket技术的话,消息就能实时刷新,这样对于一些类似于文章点赞,评论等这些实时消息,用户体验感会大大提高。
话不多说,下面看下代码实现
代码实现
pom.xml
首先先添加websocket的依赖(这是spring的)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
SpringBoot的如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
配置层
@Component
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
业务层
@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层
@Autowired
private WebSocket websocket;
// 在你发送消息(或者实现相关功能的地方)
// 调用websocket的sendMessage方法,将内容代入方法体
websocket.sendMessage("消息内容");
前端页面层
// 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();
}
简易集成websocket技术实现消息推送的更多相关文章
- springboot+websocket+sockjs进行消息推送【基于STOMP协议】
springboot+websocket+sockjs进行消息推送[基于STOMP协议] WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就 ...
- 基于ajax与msmq技术的消息推送功能实现
周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖.我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实现的,具体交互过程如下图: 先说说这个ajax长轮询,多长时 ...
- 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能
一.写在前面 要求做一个,后台发布信息,前台能即时得到通知的消息推送功能.网上搜了也有很多方式,ajax的定时询问,Comet方式,Server-Sent方式,以及websocket.表示除了定时询问 ...
- springboot整合websocket实现一对一消息推送和广播消息推送
maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Spring Boot 集成 WebSocket 实现服务端推送消息到客户端
假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的 ...
- python websocket Django 实时消息推送
概述: WebSocket 是什么? WebSocket 是 HTML5 提供的一种浏览器与服务器间进行全双工通讯的协议.依靠这种协议可以实现客户端和服务器端 ,一次握手,双向实时通信. WebSoc ...
- Springboot+websocket+定时器实现消息推送
由于最近有个需求,产品即将到期(不同时间段到期)时给后台用户按角色推送,功能完成之后在此做个小结 1. 在启动类中添加注解@EnableScheduling package com.hsfw.back ...
- WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
- HTML5 学习总结(五)——WebSocket与消息推送
B/S结构的软件项目中有时客户端需要实时的获得服务器消息,但默认HTTP协议只支持请求响应模式,这样做可以简化Web服务器,减少服务器的负担,加快响应速度,因为服务器不需要与客户端长时间建立一个通信链 ...
随机推荐
- LeetCoded第25题题解--K个一组翻转链表--java--链表
链表 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素的引用字段链接在一起. 双链表:与单链表不同的是,双链表的每个节点都含有两个引用字段. 链表优点 灵活分配内存空间 能在O ...
- 使用dom4j工具:读取xml(一)
package dom4j_read; import java.io.File; import org.dom4j.Document; import org.dom4j.io.SAXReader; / ...
- php检测数组长度的函数sizeof count
php教程检测数组长度的函数sizeof count在php检测数组长度的函数有sizeof count 下面看个简单实例*/$colorlist = array("apple" ...
- Clean Architecture For RazorPage 实现多语言和本地化
最近终于把多语言功能加上了,这次就再发一篇,讲一下在asp.net core环境下如何实现多语言和本地化(Globalization and localization)功能,主要参看:ASP.NET ...
- idea快速搭建Tomcat服务器
创建Web项目 新建Classes和lib文件夹 配置输出路径和资源路径 快捷键ctr+shift+alt+S打开项目配置 在modules下修改输出路径 修改依赖目录 修改war包输出路径 新建to ...
- 为什么Class实例可以不是全局唯一的——自定义类加载器
为什么Class实例可以不是全局唯一的 通过定义两个类加载器加载同一字节码文件来证明Class实例为什么不是全局唯一的 1.将一个名为Demo(没有后缀)的字节码文件放在D盘根目录 2.定义两个类加载 ...
- adb 常用命令大全(6)- 模拟按键输入
语法格式 input [<source>] <command> [<arg>...] 物理键 # 电源键 adb shell input keyevent 26 # ...
- 性能测试必备命令(4)- pstree
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 显示进程树 语法格式 ps ...
- python3 爬虫五大模块之五:信息采集器
Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...
- C# windows服务知识集锦
最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...