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 ...
随机推荐
- Unity下载
Unity下载 Mac OS或Windows操作系统都可以使用对应的Unity版本进行开发 Unity引擎的官方网站:http://www.unity3d.com 官方下载地址:http://unit ...
- Dynamics CRM - 使用 C# Plugin 调用 SQL 存储过程
有时候,在 Dynamics CRM Plugin 中通过 linq 查询数据会比较慢,可以通过采用在 C# plugin 中直接调用数据库存储过程的方式来提高效率,具体过程如下: 1.新建一个存储过 ...
- 轻量Pythonweb - flask+jinja2
后台代码 MVC from flask import Flask,request,render_template app = Flask(__name__) @app.route('/',method ...
- hive 时间函数
使用时发现:1.datediff可以传入timestamp类型参数 官网文档: Date Functions The following built-in date functions are ...
- Ext.Net的一例Ext Undefined解决办法
在运行的产品里发现了一例Ext Undefined报错.经过仔细排查原因是一个Ext.net按钮控件前端显示部分使用了<% if() <%> 动态控制输出Html脚本(有对应的后端 ...
- redis---------AOF文件异常导致的redis无法载入
AOF损坏时的对策1.若在写AOF文件时Server崩溃则可能导致AOF文件损坏而不能被Redis载入.可通过如下步骤修复: 创建一个AOF文件的备份: cp appendonly.aof appen ...
- java aes CBC的填充方式发现
如下的java代码,手动对block进行填充后,使其为16的整数倍后,加密的时候竟然强行再填充了16位,我在尝试用golang实现这段加密时,反复修改了很久,发现golang版的总是比java加密出来 ...
- springboot2.1.3集成单节点elasticsearch6.4.0
本案例写了一个关于医生医院搜索的例子,包括求和模式下的打分(分值与相关性有关)搜索,单节点时切勿配置节点名称和节点ip.github地址:https://github.com/zhzhair/spri ...
- tftp--实现服务器与客户端的下载与上传【转】
转自:https://blog.csdn.net/xiaopangzi313/article/details/9122975 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- git上传到版本库报错:Pull is not possible because you have unmerged files(已解决)
问题所在:操作次数太多,第一次报错之删掉了.git并没有删除下面两个文件 才报了题述错误. 解决办法: 将这三个文件都删除在重新运行所有指令.