webSocket前端代码

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>websocket</title>
</head> <body> <script>
let websocket = null; if (typeof WebSocket != 'undefined') {
websocket = new WebSocket('ws://localhost:9701/webSocket');
console.log("您的浏览器支持Websocket通信协议");
}else{
alert("您的浏览器不支持Websocket通信协议,请使用Chrome或者Firefox浏览器!")
}
websocket.onopen = function (event) {
console.log('建立链接');
} websocket.onclose = function (event) {
console.log('链接关闭');
} websocket.onmessage = function (event) {
console.log('收到消息:' + event.data);
// 弹窗 播放音乐
} websocket.onerror = function () {
console.log('websocket通信发生错误。');
} websocket.onbeforeunload = function () {
websocket.close();
}
</script>
</body> </html>

后端代码

package com.pls.bid.preparation.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet; /**
* @Description WebSocket 通信工具类
* @Author wwwang <1825153451@qq.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/9/1
* 你我山巅自相逢
*/
@Component
@ServerEndpoint("/webSocket")
@Slf4j
public class WebSocket { private Session session; private static CopyOnWriteArraySet<WebSocket> webSocketSet = new CopyOnWriteArraySet<>(); /**
* 检测链接
* @param session
*/
@OnOpen
public void onOpen(Session session){
this.session = session;
webSocketSet.add(this);
log.info("[ WebSocket消息 ] 有新的链接,总数:{}",webSocketSet.size());
} /**
* 检测链接断开
*/
@OnClose
public void onClose(){
webSocketSet.remove(this);
log.info("[ WebSocket消息 ] 链接断开,总数:{}",webSocketSet.size());
} /**
* 接收消息
* @param message
*/
@OnMessage
public void onMessage(String message){
log.info("[ WebSocket消息 ] 收到来自客户端发来的消息:{}",message);
} /**
* 给指定客户端发送消息
* @param message
*/
public void sendMessage(String message,WebSocket webSocket){
log.info("[ WebSocket消息 ] 广播消息,message={}",message);
try {
webSocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
} /**
* 广播消息
* @param message
*/
public void sendMessage(String message){
for (WebSocket webSocket : webSocketSet) {
log.info("[ WebSocket消息 ] 广播消息,message={}",message);
try {
System.out.println(webSocket.session.toString());
webSocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
} }

webSocketConfig配置类

package com.pls.bid.preparation.config;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter; /**
* @Description 描述
* @Author wwwang <1825153451@qq.com>
* @Version V1.0.0
* @Since 1.0
* @Date 2021/9/2
* 你我山巅自相逢
*/
@Component
public class WebSocketConfig { /**
* 使用spring boot时 使用的是spring-boot的内置容器
* 如果要使用webSocket,需要注入ServerEndpointExporter
* @return
*/
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}

可能发生的错误

websocket.html:17 WebSocket connection to 'ws://localhost:9701/webSocket' failed: 

解决方法

//在安全框架中放行
"/webSocket/**"

// 添加上述配置类

记录一下第一次webSocket通信成功的更多相关文章

  1. js判断是否安装某个android app,没有安装下载该应用(websocket通信,监听窗口失去焦点事件)

    现在经常有写场景需要提示用户下载app, 但是如果用户已经安装,我们希望是直接打开app. 实际上,js是没有判断app是否已经安装的方法的,我们只能曲线救国. 首先,我们需要有call起app的sc ...

  2. Springboot集成WebSocket通信全部代码,即扣即用。

    websocket通信主要来自两个类以及一个测试的html页面. MyHandler 和 WebSocketH5Config,下面全部代码 MyHandler类全部代码: package com.un ...

  3. 【Java Web开发学习】Spring MVC整合WebSocket通信

    Spring MVC整合WebSocket通信 目录 ========================================================================= ...

  4. 京信通信成功打造自动化工厂(MES应用案例)

    企业介绍: 京信通信成立于1997年,是一家集研发.生产.销售及服务于一体的移动通信外围设备专业厂商,致力于为客户提供无线覆盖和传输的整体解决方案,于2003年在香港联交所主板上市(2342.HK), ...

  5. 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...

  6. ucenter 显示通信成功的条件

    应用的主 URL+/api/uc.php?code= 如果这个页面返回1,则通信成功,也就是说,uc.php是通信成功里重要的一环 事实上,我还没有通信成功,我只是写了一个1在欺骗服务端

  7. C#(SuperWebSocket)与websocket通信

    原文:C#(SuperWebSocket)与websocket通信 客户端代码 点击可以查看一些关于websocket的介绍 <!DOCTYPE html> <html> &l ...

  8. websocket通信1009错误,

    问题说明: springboot继承 WebSocketConfigurer实现websocket通信服务,服务器端报错,"The decoded text message was too ...

  9. Python3+WebSockets实现WebSocket通信

    一.说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层. ...

  10. webSocket通信

    针对webSocket通信总结: 1.webSocket通信原理图: 2.webSocket通信实例 参考地址1:https://www.cnblogs.com/cjm123/p/9674506.ht ...

随机推荐

  1. dotnet 6 为什么网络请求不跟随系统网络代理变化而动态切换代理

    本文记录在 dotnet 6 的网络和在 .NET Framework 的行为的变更.在 dotnet 6 下,默认的网络请求在系统网络代理变更的时候,是不会动态切换代理的.例如在应用运行进行网络通讯 ...

  2. Docker镜像基本原理

    前言 Docker系列文章: 如果没有安装过Docker请参考本文最后部分,大家从现在开始一定要按照我做的Demo都手敲一遍,印象会更加深刻的,加油! 为什么学习Docker Docker基本概念 什 ...

  3. vue通过input选取apk文件上传,显示进度条

    <template> <div class=""> <form action="" method="post" ...

  4. Typora最后的免费版本0.11.18

    Typora最后的免费版本为0.11.18. 之后的1.x开始收费. 免费版本0.11.18的百度网盘链接如下(永久链接): 链接:https://pan.baidu.com/s/1XizAD0SFp ...

  5. WEB服务与NGINX(22)- nginx的七层负载均衡功能

    目录 1. NGINX实现负载均衡功能 1.1 nginx负载均衡概述 1.2 nginx实现http的负载均衡 1.2.1 nginx基于http负载均衡场景配置 1.2.1.1 负载均衡相关参数 ...

  6. java后台@RequestBody和@RequestParam

    RequestBody 接收的是请求体里面(body)的数据 RequestParam接收的是key-value里面的参数,所以它会被切割进行处理从而可以是普通元素.数组.集合.对象等接收 get-- ...

  7. vue和react的相同点和不同点

    Vue和React作为现代前端开发中流行的两个JavaScript框架,它们有诸多相似之处,同时也存在一些关键性的不同.以下是Vue和React的一些主要相同点和不同点: 相同点: 虚拟DOM:Vue ...

  8. Stable Diffusion 术语表

    Stable Diffusion 术语表 说明 原文地址:https://theally.notion.site/The-Definitive-Stable-Diffusion-Glossary-1d ...

  9. PStorm 安装与破解

    官方下载地址: https://www.jetbrains.com/zh-cn/phpstorm/promo/?utm_source=baidu&utm_medium=cpc&utm_ ...

  10. C# dynamic动态对象赋值

    dynamic 如果接收的是匿名对象,是无法为属性赋值的,而如果是接收的定义对象,又无法扩展字段. 解决办法序列化为json字符串,然后用Dictionary反序列化,就能赋值了.也能扩展新的字段. ...