【JavaWeb后端学习笔记】WebSocket通信

server/2024/12/19 1:19:34/

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

主要应用场景:视频弹幕、网页聊天、体育实况更新、股票基金报价实时更新等。

WebSocket使用步骤:

  1. 编写WebSocket客户端,由前端提供。
  2. 导入WebSocket对应的Maven坐标
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  1. 导入WebSocket服务端组件,用于和客户端通信。这部分代码需要自己编写,可参考如下代码。
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.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;/*** WebSocket服务*/
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {//存放会话对象private static Map<String, Session> sessionMap = new HashMap();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("sid") String sid) {System.out.println("客户端:" + sid + "建立连接");sessionMap.put(sid, session);}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, @PathParam("sid") String sid) {System.out.println("收到来自客户端:" + sid + "的信息:" + message);}/*** 连接关闭调用的方法** @param sid*/@OnClosepublic void onClose(@PathParam("sid") String sid) {System.out.println("连接断开:" + sid);sessionMap.remove(sid);}/*** 群发** @param message*/public void sendToAllClient(String message) {Collection<Session> sessions = sessionMap.values();for (Session session : sessions) {try {//服务器向客户端发送消息session.getBasicRemote().sendText(message);} catch (Exception e) {e.printStackTrace();}}}}
  1. 编写配置类。可自定义一个WebSocketConfiguration配置类,注册WebSocket的服务端组件。这部分代码比较固定。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;/*** WebSocket配置类,用于注册WebSocket的Bean*/
@Configuration
public class WebSocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}
  1. 注入WebSocketServer的Bean对象,调用发送消息的相关方法。在本案例中,WebSocketServer提供了群发方法sendToAllClient()。

http://www.ppmy.cn/server/151309.html

相关文章

LabVIEW起落架震台检测

在现代飞机制造与维护过程中&#xff0c;起落架的性能测试是保障飞机安全的重要环节。通过LabVIEW开发的起落架小落震台检测系统&#xff0c;通过模拟飞机着陆过程&#xff0c;准确捕捉起落架在着陆时承受的各种动力学特性和应力响应&#xff0c;有效提升起落架设计的精度与可靠…

iOS开发 UIAlertView与UIActionSheet替换方案之SDAlertView与SDActionSheet

iOS开发 UIAlertView与UIActionSheet替换方案之SDAlertView与SDActionSheet 由于在iOS开发中&#xff0c;项目中还在使用UIAlertView与UIActionSheet&#xff0c;由于这两个类在iOS开始废弃 UIKIT_EXTERN API_DEPRECATED(“UIAlertView is deprecated. Use UIAlertController…

宝塔SSL证书申请失败,报错:申请SSL证书错误 module ‘OpenSSL.crypto‘ has no attribute ‘sign‘(已解决)

刚安装宝塔申请SSL就报错&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign 面板、插件版本&#xff1a;9.2.0 系统版本&#xff1a;Alibaba Cloud Linux 3.2104 LTS 问题&#xff1a;申请SSL证书错误 module OpenSSL.crypto has no attribute sign…

医疗 UI 设计如何精准传达复杂的健康数据?

在医疗环境中&#xff0c;患者往往承受着身体不适和心理压力&#xff0c;医疗 UI 设计的色彩搭配因此具有了特殊且重要的意义。合适的色彩组合能够营造出宁静、安心的氛围&#xff0c;有助于舒缓患者的紧张与焦虑情绪&#xff0c;促进其康复过程。 蓝色系常常被视为医疗 UI 设…

在完全不连外网的 Linux 服务器里更新 docker compose

docker compose 的 develop.watch 属性至少要 2.22.0 版本 故参考&#xff1a;docs.docker.com/compose/install/linux/#install-the-plugin-manual… Linux 服务器 输入 uname -a 查看架构信息 在能连外网的电脑上下载 OS 对应版本的 compose 可执行文件 访问 github.com/do…

Python 默认 Logging 级别及其示例

Python 默认 Logging 级别及其示例 在开发Python应用程序时&#xff0c;日志记录&#xff08;Logging&#xff09;是调试和监控程序运行状态的重要工具。Python的logging模块提供了一种灵活且强大的方式来记录应用程序的信息。本文将详细介绍Python logging模块的默认级别&…

Java安全—SpringBootActuator监控泄露Swagger自动化

前言 今天依旧是SpringBoot框架&#xff0c;估计还要一篇文章才能把它写完&#xff0c;没办法&#xff0c;Java安全的内容太多了。 Actuator SpringBoot Actuator模块提供了生产级别的功能&#xff0c;比如健康检查&#xff0c;审计&#xff0c;指标收集&#xff0c;HTTP跟踪…

Javaweb:HTML、CSS

学习 资源1 学习资源 2 黑马javaweb HTML 1、基础标签、样式 图片标签&#xff1a;<img> src:绝对路径、相对路径(绝对磁盘路径&#xff0c;网络路径&#xff1b;./当前目录&#xff09;width:宽度&#xff08;百分比&#xff09;height:高度&#xff08;百分比&…