网上的大部分教程是基于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的更多相关文章

  1. 在spring boot中使用webSocket组件(二)

    该篇演示如何使用websocket创建一对一的聊天室,废话不多说,我们马上开始! 一.首先先创建前端页面,代码如下图所示: 1.login.html <!DOCTYPE html> < ...

  2. 在spring boot中使用webSocket组件(一)

    最近在项目中使用到了spring的webSocket组件,在这里和大家分享下,如有错误,欢迎大家指正. 在这里我使用的IDE工具是Intellij idea,框架是spring boot.spring ...

  3. Spring Boot 开发集成 WebSocket,实现私有即时通信系统

    1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. 2/ 所需依赖 Spring Boot 版本 ...

  4. Spring Boot中使用Websocket搭建即时聊天系统

    1.首先在pom文件中引入Webscoekt的依赖 <!-- websocket依赖 --> <dependency> <groupId>org.springfra ...

  5. Spring Boot 中使用 WebSocket 实现一对多聊天及一对一聊天

    为什么需要WebSocket? 我们已经有了http协议,为什么还需要另外一个协议?有什么好处? 比如我想得到价格变化,只能是客户端想服务端发起请求,服务器返回结果,HTTP协议做不到服务器主动向客户 ...

  6. Spring Boot 整合单机websocket(附github源码)

    websocket 概念 websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信.websocket 连接成功后,服务端和客户可以进行双向通信.不同于 http 通信协议需要每次由客 ...

  7. 【websocket】spring boot 集成 websocket 的四种方式

    集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency> <groupId>org.springframework.boot</gr ...

  8. 在Spring Boot框架下使用WebSocket实现消息推送

    Spring Boot的学习持续进行中.前面两篇博客我们介绍了如何使用Spring Boot容器搭建Web项目(使用Spring Boot开发Web项目)以及怎样为我们的Project添加HTTPS的 ...

  9. Spring Boot 系列 - WebSocket 简单使用

    在实现消息推送的项目中往往需要WebSocket,以下简单讲解在Spring boot 中使用 WebSocket. 1.pom.xml 中引入 spring-boot-starter-websock ...

随机推荐

  1. practice01

    1. 组合数公式: C(n, k) =C(n-1, k) +C(n-1, k-1) 要求利用该公式写递归函数求组合数. #include <stdio.h> int C(int a,int ...

  2. SNOI 2019 字符串

    SNOI 2019 字符串 题目 题解: 解法一: 记一个数组\(f\),\(f[i]=\min_j\ s[j]\neq s[j+1] (j\geq i)\),直接sort即可,复杂度\(O(nlog ...

  3. 51nod1237 最大公约数之和

    题目链接 题意 其实就是求 \[\sum\limits_{i=1}^n\sum\limits_{j=1}^ngcd(i,j)\] 思路 建议先看一下此题的一个弱化版 推一下式子 \[\sum\limi ...

  4. Linux命令_sed_2

    2.替换(将包含"xxx"的行中的"yyy"替换成"zzz") 现有文件“replace_specified_contained_line” ...

  5. CMake快速入门

    参考: https://www.hahack.com/codes/cmake/ 1. 单目标文件 main.c #include <stdio.h> #include <stdlib ...

  6. mongodb增加新字段报错解决方法

    今天想在项目的一个集合里增加一个新字段 db.article.update({},{$set:{status:0}},{multi:true}) multi : 可选,mongodb 默认是false ...

  7. 函数语法:原生js判断某个元素是否有指定的class名的几种方法

    var aLi = document.querySelectorAll('#tabs li'); for(var i = 0;i <p.length;i++){ //第一种方法,用classLi ...

  8. JS判断页面是在浏览器还是微信打开

    一.Navigator对象 1.获取用户的浏览器信息. let ua = navigator.userAgent.toLowerCase(); 打印一下ua的结果: Mozilla/5.0 (Maci ...

  9. 动态渲染页面爬取-Selenium & Splash

    模拟浏览器的动机 JS动态渲染的页面不止Ajax一种 很多网页的Ajax接口含有加密参数,分析其规律的成本过高 通过对浏览器运行方式的模拟,我们将做到:可见即可爬 Python中常用的模拟浏览器运行的 ...

  10. 2019年一次java知识点总结

    java基础 数据类型 集合与数据结构 关键字(static,rty ...) IO和网络 多线程(并发与锁,死锁) 异常 简单算法,复杂度 JVM 类加载 java内存模型 对象监听器字节码 垃圾回 ...