前后端分离,SpringBoot。WEBSocket后台报警页面提示

2023-05-16

前端JS

var websocket = null;

//判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址

if ('WebSocket' in window) {

websocket = new WebSocket("ws://IP:端口/test/oneToOne");

} else {

alert('Not support websocket')

}

//连接发生错误的回调方法

websocket.onerror = function() {

setMessageInnerHTML("error");

};

//连接成功建立的回调方法

websocket.onopen = function(event) {

setMessageInnerHTML("open");

}

//接收到消息的回调方法

websocket.onmessage = function(event) {

setMessageInnerHTML(event.data);

}

//连接关闭的回调方法

websocket.onclose = function() {

setMessageInnerHTML("close");

}

//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

window.onbeforeunload = function() {

websocket.close();

}

//将消息显示在网页上

function setMessageInnerHTML(innerHTML) {

document.getElementById('message').innerHTML += innerHTML + '<br/>';

alert(innerHTML);

autoPlay();

}

//关闭连接

function closeWebSocket() {

websocket.close();

}

//发送消息

function send() {

var message = document.getElementById('text').value;

websocket.send(message);

}

function autoPlay(){

var myAuto = document.getElementById('myaudio');

myAuto.src="dist/img/ding.mp3"; //注意这儿是所指向的src,然后下面有一个autoplay属性,只要准备就绪,就播放,所以每次从头开始,因为每次从服务器下载过来就播放

}

JAVA后台

@CrossOrigin(origins = "${server.httppath}", allowCredentials = "true")

@ServerEndpoint(value = "/test/oneToOne")

@Component

public class OneToOneWebSocket {

private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(OneToOneWebSocket.class);

/** 记录当前在线连接数 */

private static AtomicInteger onlineCount = new AtomicInteger(0);

/** 存放所有在线的客户端 */

private static ConcurrentHashMap<String, Session> clients = new ConcurrentHashMap<>();

/**

* 连接建立成功调用的方法

*/

@OnOpen

public void onOpen(Session session) {

onlineCount.incrementAndGet(); // 在线数加1

clients.put(session.getId(), session);

// log.info("有新连接加入:{},当前在线人数为:{}", session.getId(), onlineCount.get());

}

/**

* 连接关闭调用的方法

*/

@OnClose

public void onClose(Session session) {

onlineCount.decrementAndGet(); // 在线数减1

clients.remove(session.getId());

// log.info("有一连接关闭:{},当前在线人数为:{}", session.getId(), onlineCount.get());

}

/**

* 收到客户端消息后调用的方法

*

* @param message

* 客户端发送过来的消息

*/

@OnMessage

public void onMessage(String message, Session session) {

// log.info("服务端收到客户端[{}]的消息[{}]", session.getId(), message);

try {

MyMessage myMessage =new MyMessage(message, session.getId());

if (myMessage != null) {

Session toSession = clients.get(myMessage.getUserId());

if (toSession != null) {

this.sendMessage(myMessage.getMessage());

}

}

} catch (Exception e) {

log.error("解析失败:{}", e);

}

}

@OnError

public void onError(Session session, Throwable error) {

log.error("发生错误A");

error.printStackTrace();

}

/**

* 服务端发送消息给客户端

*/

public void sendMessage(String message) {

try {

// log.info("服务端给客户端[{}]发送消息[{}]", toSession.getId(), message);

// toSession.getBasicRemote().sendText(message);

for (HashMap.Entry<String, Session> sessionEntry : clients.entrySet()) {

Session toSession = sessionEntry.getValue();

// 排除掉自己

log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message);

toSession.getAsyncRemote().sendText(message);

}

} catch (Exception e) {

log.error("服务端发送消息给客户端失败:{}", e);

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前后端分离,SpringBoot。WEBSocket后台报警页面提示 的相关文章

  • Template parse errors: Can't bind to 'ngStyle' since it isn't a known property of 'div'. ("

    1 背景 开发个公共组件 xff0c 在组件中使用指令一直报错 template 96 lt div class 61 34 content text bgp 34 gt lt div class 61 34 content text 34
  • linux mount 远程服务器共享目录

    NFS是文件系统 在网络存储方面我们应该有所了解 那么针对NFS服务器的安装和设置我们来详细介绍一下 首先让我们看一下NFS服务器的安装步骤 一 NFS服务器的安装 检查linux系统中是否安装了nfs utils和portmap两个软件包
  • 【每日一题】969. 煎饼排序

    969 煎饼排序 题目描述解决方案 xff1a 类选择排序法代码 xff1a Python 题目来源 xff1a Leetcode 原文链接 xff1a https mp weixin qq com s jboDC0R oYAy ssCXp
  • 让Num Lock默认开启

    让Num Lock默认开启 2008年11月18日 星期二 10 46 A M 1 对于2000或者XP操作系统 xff0c 登陆前NUM LOCK默认为关闭 xff0c 此为正常现象 xff0c 若用户需要此功能 xff0c 则需更改注册
  • Windows下使用Sublime Text配置C++编译环境

    1 打开Sublime xff0c 选择Tools gt Build System gt New Build System 2 将以下代码复制粘贴到新文件中去 34 span class hljs attribute path span 3
  • 一步步将ffmpeg封装golang/cgo库

    欢迎访问博客原文 xff1a https lightfish cn 2018 12 24 ffmpeg cgo 前言 继上一篇 ffmpeg音视频C编程入门 使用高性能的C语言进行音视频的处理 xff0c 比较执行效率比较高 xff0c 但
  • 十六.Spark SQL之读取复杂的json数据

    第一步 准备json数据 test json 34 name 34 34 liguohui 34 34 nums 34 1 2 3 4 5 34 name 34 34 zhangsan 34 34 nums 34 6 7 8 9 10 te
  • “当前不会命中断点 还没有为该文档加载任何符号”问题的解决

    今天在实验室的电脑上调试程序出现了 当前不会命中断点 还没有为该文档加载任何符号 断点失效的情况 xff0c 是调用的静态库中断点失效 xff0c 但程序在我自己电脑上是可以正常打断点的 按照网上的方法试过没有成果 xff0c 但是启发了我
  • 【经验分享】设置电脑定时开关机

    文章目录 1 定时开机设置 xff08 BIOS固件设置 xff09 2 定时关机设置 放长假回家 xff0c 不想拷贝资料 xff0c 因此打算用todesk远程连接办公 但是工位电脑一直开着 xff0c 还不能睡眠 xff0c 担心会过
  • AirSim多台无人机第一视角键盘控制进阶版

    AirSim多台无人机第一视角键盘控制进阶版 目录 AirSim多台无人机第一视角键盘控制进阶版本文实现的效果前言一 环境依赖二 图像读取与显示1 使用的API2 实时显示的一种方法 三 键盘控制改进总结 本文实现的效果 前言 本篇文章实现
  • 百度APP iOS端内存优化实践-内存管控方案

    01 背景 随着业务的发展 xff0c 百度APP有很多大内存业务场景如直播 短视频 小程序 百度识图等 xff0c 通过线上页面统计数据得知超过150M页面有40个 xff0c 耗内存最多的页面有400M 单个页面不会有内存或者稳定性问题
  • 百度APP iOS端内存优化-原理篇

    一 Mach虚拟内存 1 1 Mach内存简介 iOS系统架构可分为内核驱动层 xff08 Kernel and Device Drivers Layer xff09 核心操作系统层 xff08 Core OS xff09 核心服务层 xf
  • 【图文并茂】手把手教你重装Win10系统

    当遇见电脑出现问题 xff0c 想要重装系统的小伙伴们 xff0c 小编在这里手把手教你重装Win10系统 xff0c 推荐系统之家装机大师 xff0c 他是一款非常好用的一键重装工具 xff0c 有不少小伙伴都在使用 xff0c 但对于刚
  • 【每日一题】1994.好子集的数目

    1994 好子集的数目 题目描述解决方案 xff1a 状态压缩 43 动态规划代码 xff1a Python 题目来源 xff1a LeetCode 原文链接 xff1a https mp weixin qq com s myI7 ZwJM
  • Win11打开移动热点后电脑无法上网怎么办?

    Win11打开移动热点后电脑无法上网怎么办 xff1f 有用户将自己的电脑开启移动热点来使用的时候 xff0c 发现自己的电脑出现了无法上网的情况 那么为什么开启热点之后 xff0c 就会无法进行上网呢 xff1f 来看看以下的解决方法分享
  • abaqus导出全部节点应力值

    一 查询应力点 1 2 3 二 导出应力点 1 点击报告 xff08 E xff09 场输出 xff08 F xff09 2 选择想要输出的参数 xff0c 应用 xff08 提前设置好文件夹与文件名 xff09
  • Docker容器之Dockerfile构建镜像

    目录 一 Dcokerfile概念 1 dockerfile的原理 二 Docker镜像的创建 1 基于已有镜像创建 2 基于本地模板创建 3 基于dockerfile创建 三 镜像分层的原理 1 Docker镜像分层 xff08 基于AU
  • 树莓派——开机指南

    1 准备 硬件准备 树莓派一块 SD卡 xff08 小卡 xff09 读卡器 树莓派电源或安卓手机电源 xff08 功率10w以上 xff0c 不然会导致电压不足会影响其性能 xff09 一台电脑 xff08 可以没有显示屏和鼠标键盘 xf
  • pytesseract的使用 | python识别验证码

    目录 1 安装tesseract2 安装pytesseract3 修改包中部分代码4 代码网站测试 1 安装tesseract 详见 xff1a https blog csdn net lijiamingccc article detail
  • 从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    最近去面试了几家公司 xff0c 被问到hashCode的作用 xff0c 虽然回答出来了 xff0c 但是自己还是对hashCode和equals的作用一知半解的 xff0c 所以决定把它们研究一下 以前写程序一直没有注意hashCode

随机推荐