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

WebSocket启用备忘

一:引入依赖:

<!--WebSocket专用--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.glassfish.tyrus.bundles</groupId><artifactId>tyrus-standalone-client</artifactId><version>2.1.5</version></dependency><!--WebSocket end-->

二:写Service:

@Component
@ServerEndpoint("/websocket/tterm")
public class WebSocketServerEterm {
@OnOpen
public void onOpen(Session session) {try {_socket = new Socket(serverIp, serverPort); // 使用配置中的IP和端口if (_socket.isConnected()) {。。。}
}}
@OnMessage
public void onMessage(String command, Session session) 
@OnClose
public void onClose(Session session) {try {if (_socket != null)_socket.close();System.out.println("Socket连接关闭: " + session.getId());} catch (IOException e) {System.err.println("关闭Socket资源失败:" + e.getMessage());}
}

 三、使用

const WS_BASE_URL = import.meta.env.VITE_WS_URL;
const url = WS_BASE_URL ? `${WS_BASE_URL}/websocket/tterm` : null;
 

// 切换模态框
const toggleEtermModal = async () => {if (!url) {message.error('WebSocket服务未配置');return;}etermVisible.value = !etermVisible.value;if (etermVisible.value) {try {await nextTick();document.querySelector('.eterm-input')?.focus();etermLoading.value = true;await etermApi.connect(url, {onMessage: (data) => {etermList.value.push({command: '',response: data});scrollToBottom();},onOpen: () => {socketConnected.value = true;etermList.value.push({command: '',response: '>>> 连接成功'});},onClose: () => {socketConnected.value = false;}});} catch (error) {message.error(`连接失败: ${error.message}`);etermVisible.value = false;} finally {etermLoading.value = false;}} else {etermApi.exit();}
};

四、正式环境需要结合NGINX:
 

# WebSocket 代理配置location /api/websocket/eterm {proxy_pass http://111.222.3.4:1111/websocket/eterm;# WebSocket 必须配置proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;# 连接超时设置proxy_read_timeout 86400s;proxy_send_timeout 86400s;proxy_connect_timeout 5s;# 日志记录access_log /var/log/nginx/websocket.log websocket;}
http://www.xdnf.cn/news/43975.html

相关文章:

  • 【C++】类和对象之日期类的实现(构造、运算符重载)
  • Deepseek输出的内容如何直接转化为word文件?
  • PFLM: Privacy-preserving federated learning with membership proof证明阅读
  • mysql中的group by用法详解
  • 大模型安全吗?数据泄露与AI伦理的黑暗面!
  • 【数据结构_12】二叉树(4)
  • redis 中的 String 数据结构
  • 【Linux系统】Linux基础指令(详解Linux命令行常用指令,每一个指令都有示例演示)
  • 【2025计算机网络-面试常问】http和https区别是什么,http的内容有哪些,https用的是对称加密还是非对称加密,流程是怎么样的
  • 【人工智能】推荐开源企业级OCR大模型InternVL3
  • 【后端开发】MyBatis
  • 树莓派系统中设置固定 IP
  • Oracle 23ai Vector Search 系列之6 向量相似性搜索(Similarity Search)
  • 力扣DAY60-61 | 热100 | 回溯:单词搜索、分割回文串
  • 17.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--SonarQube部署与配置
  • kotlin知识体系(六) : Flow核心概念与与操作符指南
  • opencv图像库编程
  • 软件开发过程中技术债的控制策略
  • iPhone 13P 换超容电池,一年实记的“电池循环次数-容量“柱状图
  • next.js 如何实现动态路由?
  • 【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析
  • Git拉分支技巧:从零开始创建并推送分支
  • 每天学一个 Linux 命令(28):ln
  • 产品经理学习过程
  • 深度剖析即梦 AI:开启创意无限的智能创作时代
  • springboot--web开发响应参数注解
  • Web前端:百度首页克隆 - 前端开发练习
  • 网络设备基础运维全攻略:华为/思科核心操作与巡检指南
  • 2.2 BackgroundWorker的使用介绍
  • Python实现对大批量Word文档进行批量自动化排版(15)