Spring boot实现原生websocket
网上的大部分教程是基于sockjs,这篇文章内容则是基于原生协议。
后台Spring boot 配置
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Resource
private WsSiteHandler wsSiteHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(wsSiteHandler, "site/change").setAllowedOrigins("*");
}
}
@Component
public class WsSiteHandler extends TextWebSocketHandler {
private final static Logger logger = LoggerFactory.getLogger(WsSiteHandler.class);
private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();
private ExecutorService executor = Executors.newCachedThreadPool();
public void asyncNotice(SiteTo to) {
executor.execute(() -> {
String json = new Gson().toJson(to);
handleTextMessage(null, new TextMessage(json));
});
}
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
if (session == null) {
sessions.removeIf(el -> !el.isOpen());
sessions.forEach(el -> {
try {
if (el.isOpen()) {
el.sendMessage(message);
} else {
el.close();
}
} catch (IOException e) {
logger.error("发送车位信息错误!", message.toString(), e);
}
});
} else {
try {
session.sendMessage(message);
} catch (IOException e) {
logger.error("发送车位信息错误!", message.toString(), e);
}
}
}
@Override
public void afterConnectionEstablished(WebSocketSession session) {
sessions.add(session);
}
}
前台调用
initWs () {
if (!window.WebSocket) return
this.socket = new WebSocket(`ws://127.0.0.1:9000/marketing/site/change`)
this.socket.onopen = (event) => {
console.log('onopen', event)
}
this.socket.onmessage = (event) => {
console.log('onmessage', event.data)
const siteTo = JSON.parse(event.data)
siteTo.lock = siteTo.isLock
const index = this.result.findIndex(el => el.site.id === siteTo.site.id)
if (index >= 0) {
this.result.splice(index, 1, siteTo)
}
}
this.socket.onerror = (event) => {
console.log('onerror', event)
}
}
Spring boot实现原生websocket的更多相关文章
- 在spring boot中使用webSocket组件(二)
该篇演示如何使用websocket创建一对一的聊天室,废话不多说,我们马上开始! 一.首先先创建前端页面,代码如下图所示: 1.login.html <!DOCTYPE html> < ...
- 在spring boot中使用webSocket组件(一)
最近在项目中使用到了spring的webSocket组件,在这里和大家分享下,如有错误,欢迎大家指正. 在这里我使用的IDE工具是Intellij idea,框架是spring boot.spring ...
- Spring Boot 开发集成 WebSocket,实现私有即时通信系统
1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 ...
- Spring Boot中使用Websocket搭建即时聊天系统
1.首先在pom文件中引入Webscoekt的依赖 <!-- websocket依赖 --> <dependency> <groupId>org.springfra ...
- Spring Boot 中使用 WebSocket 实现一对多聊天及一对一聊天
为什么需要WebSocket? 我们已经有了http协议,为什么还需要另外一个协议?有什么好处? 比如我想得到价格变化,只能是客户端想服务端发起请求,服务器返回结果,HTTP协议做不到服务器主动向客户 ...
- Spring Boot 整合单机websocket(附github源码)
websocket 概念 websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信.websocket 连接成功后,服务端和客户可以进行双向通信.不同于 http 通信协议需要每次由客 ...
- 【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...
- 在Spring Boot框架下使用WebSocket实现消息推送
Spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的 ...
- Spring Boot 系列 - WebSocket 简单使用
在实现消息推送的项目中往往需要WebSocket,以下简单讲解在Spring boot 中使用 WebSocket. 1.pom.xml 中引入 spring-boot-starter-websock ...
随机推荐
- 洛谷 P2590 [ZJOI2008]树的统计
大家好,我非常喜欢暴力数据结构,于是我用块状树过了这道题目 题目: 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE ...
- css:a:visited限制
:active 对于:active伪类可以在div上生效.没有限制 :visited使用限制 :visited只适用于带href的a标签.如果给a标签绑定了click事件,那跳转的url必须跟href ...
- openvpn搭建
以ubuntu系统为例: 1.安装openvpn和easy-rsa,easy-rsa主要用来设置CA(证书颁发机构) $ sudo apt-get update $ sudo apt-get inst ...
- 关于word-break和word-wrap的使用和区别
当一段文字有一个长长长的英文单词的情况下使用这两个属性的区别: word-wrap: 哈哈哈, aaaaa bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb word-break: ...
- NFV-Based Scalable Guaranteed-Bandwidth Multicast Service for Software Defined ISP Networks
文章名称:NFV-Based Scalable Guaranteed-Bandwidth Multicast Service for Software Defined ISP Networks 发表时 ...
- Vue学习笔记七:Vue中的样式
目录 两种样式 class样式 内联样式 两种样式 Vue中使用样式方式有两种,一种是class样式,一种是内联样式也就是style class样式 class样式使用的方式有5种,HTML如下 &l ...
- step into,step over,step out.
step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止, ...
- docker安装elasticsearch
docker search elasticsearch 选择一个版本,拉取镜像 docker pull elasticsearch: 查看镜像 docker images 通过镜像,启动一个容器,并将 ...
- Lambda表达式概念与基本语法
Lambda表达式是Java 8的重要更新,一个被广大开发者期待已久的新特性.Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被 ...
- JSP循环缓存列表
两种方法: 例如,有下拉框 <select></select>其中选项需要循环显示 1.JAVA代码循环 <% for(int i=0;i<list.size(); ...