当前位置: 首页 > news >正文

简单的Websocket程序示例(Spring Boot)

该示例的工程代码我已经上传到CSDN资源网站,下载地址是:
https://download.csdn.net/download/look4liming/10957504

1、首先建一个空的Spring Boot项目
2、在pom.xml中添加如下依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>

3、新增一个Configuration类
注意,这个类必须有,否则Websocket服务类的注解配置无法生效。

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; /** * 必须有此类,否则Websocket配置不生效(原因尚未查清)。 * @author Bright Lee */ @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }

4、新增Websocket服务类

import java.io.IOException; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; import org.springframework.stereotype.Component; @ServerEndpoint(value = "/websocket") @Component public class WebSocketServer { private Session session; @OnOpen public void onOpen(Session session) { this.session = session; try { sendMessage("连接成功!!!"); } catch (IOException e) { e.printStackTrace(); } } @OnClose public void onClose() { } @OnMessage public void onMessage(String message, Session session) { try { sendMessage("您发送的消息是--->" + message); } catch (IOException e) { e.printStackTrace(); } } @OnError public void onError(Session session, Throwable error) { error.printStackTrace(); } public void sendMessage(String message) throws IOException { session.getBasicRemote().sendText(message); } }

5、新增index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Websocket客户端</title> <script> var websocket = null; var content = null; function init() { content = document.getElementById("content"); } function printToScreen(message) { var pElement = document.createElement("p"); pElement.innerHTML = message; content.appendChild(pElement); } function connect() { if (websocket != null) { return; } var url = "ws://127.0.0.1:8080/websocket"; printToScreen("开始连接:" + url); websocket = new WebSocket(url); websocket.onopen = function(event) { printToScreen("连接成功!"); } websocket.onmessage = function(event) { printToScreen("收到消息:" + event.data); } websocket.onerror = function(event) { printToScreen("出现错误:" + event.data); closeWebsocket(); } } function sendMessage() { if (websocket == null) { return; } websocket.send(messageInput.value); printToScreen("发送消息:" + messageInput.value); } function closeWebsocket() { if (websocket == null) { return; } websocket.close(); websocket = null; printToScreen("已关闭!"); } </script> </head> <body onload="init();"> <div style="text-align: left;"> <form action=""> <input type="text" id="messageInput" value="你好!!!"> <input type="button" onclick="connect();" value="连接"> <input type="button" onclick="sendMessage();" value="发送"> <input type="button" onclick="closeWebsocket();" value="关闭"> <br /> </form> </div> <div id="content"></div> </body> </html>

6、启动Spring Boot项目,访问index.html
在浏览器中输入:http://127.0.0.1:8080/index.html

青蛙客服系统:https://download.csdn.net/download/look4liming/93326820

http://www.cnnetsun.cn/news/4255637.html

相关文章:

  • AI PC与智慧家庭融合:本地推理如何重构智能家居场景
  • GPS信号为何脆弱?从1瓦干扰到航空安全的技术拆解
  • 基于SpringBoot的民间艺术传承管理系统(源码+讲解视频+LW)
  • 全栈接口迁移怎样平稳推进
  • YOLOv5实战:冬虫夏草小目标检测从训练到部署全流程
  • 基于微信小程序与Java Spring Boot的学生签到系统设计与实现
  • C#通过LibUsbDotNet实现USB设备底层通信全流程指南
  • Meta编程Agent对标Opus 5:AI编程工具链深度评测与接入指南
  • I.MX6ULL ECSPI驱动ICM-20608:从设备树到IIO的完整实践
  • 具身智能卖铲人:数据标注与采集半年融资170亿背后的技术逻辑
  • Agent评估指标体系:Pass@k能力上限与Pass^k连续可靠(业务可靠性)
  • Rust团队引入LLM规则辅助代码审查:保护人类注意力而非替代
  • PAST-Bench 个人智能体递归自我改进评测基准解析与实操
  • MySQL中的用户和权限管理(如果想知道MYSQL中有关用户和权限管理的知识,那么只看这一篇就足够了!)
  • AI智能商城APP定制开发全流程实战指南
  • 滑块验证码AI识别全解析:从ddddocr到拟人轨迹模拟
  • Data Pyramid:机器人学习数据的分层体系与实践指南
  • 2026年专科生课堂汇报论文降重工具,实际用下来这几款靠谱
  • iPhone照片打不开或无法上传?手把手教你heic格式转化png的完整流程
  • ADC模数转换器原理与工程实践全解析
  • 微信小程序+PHP云打印系统源码解析:图文打印与证件照全流程
  • AerialVLA:基于VLA大模型的无人机端到端视觉语言导航实战解析
  • 基于Python与MySQL的招聘岗位数据可视化分析实战
  • 企业微信外部群发送消息API:文本、图片、文件接口怎么接
  • 模拟退火算法原理与实战:从Metropolis准则到TSP问题求解
  • MCP协议:AI工具生态的USB-C标准,从原理到实战开发
  • 从Live2D到AI陪伴:打造会回应情绪的虚拟角色技术全解
  • C++内存管理与模板编程实战:从智能指针到泛型设计
  • 水资源压力量化建模:空间异质性与韧性策略可解释性
  • 浏览器标注功能优化实战:坐标系统、Canvas渲染与性能调优