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

WebSocket连接的例子

// 初始化WebSocket连接
const initWebSocket = () => {console.log("初始化链接中...")const websocketUrl =`ws://61.54.84.16:9090/`;// WebSocket服务器地址websocket = new WebSocket(websocketUrl)//使用真实的webscket// websocket = new MockWebSocket(websocketUrl);// 使用模拟的WebSocket文件websocket.onopen = () => {console.log('WebSocket连接已建立', websocket)// 发送心跳消息保持连接setInterval(() => {if (websocket.readyState === 1) {websocket.send(JSON.stringify({type: 'ping'}));}}, 30000);}websocket.onmessage = (event) => {try {console.log('接收到WebSocket数据:', event)const data = JSON.parse(event.data)handleWebSocketData(data)} catch (error) {console.error('解析WebSocket数据失败:', error)}}websocket.onclose = () => {console.log('WebSocket连接已关闭')// 5秒后尝试重连setTimeout(initWebSocket, 5000)}websocket.onerror = (error) => {console.error('WebSocket连接错误:', error)}
}// 处理WebSocket接收到的数据
const handleWebSocketData = (msg) => {console.log('处理WebSocket数据:', msg)
}

模拟webscket传输数据的过程

mockWebScoket.ts

// 模拟WebSocket对象(用于演示,实际项目中应连接真实服务器)
// 其他页面引入
//  import MockWebSocket from './mockWebScoket';
// 调用
// const ws = new MockWebSocket('ws://example.com/ws');
// mock返回的数据
// currentNumber:"A015"
// department:"妇科诊区"
// waitingQueue: ['A016', 'A017', 'A018', 'A019', 'A020', 'A021', 'A022', 'A023', 'A024', 'A025']export class MockWebSocket {static CONNECTING = 0;static OPEN = 1;static CLOSED = 3;static DEPARTMENTS = ["内科诊区", "外科诊区", "儿科诊区", "妇科诊区", "眼科诊区"];constructor(url) {this.url = url;this.readyState = MockWebSocket.CONNECTING;this.onopen = null;this.onmessage = null;this.onclose = null;this.onerror = null;this.mockInterval = null;//默认触发// 模拟连接过程setTimeout(() => {// 模拟连接成功this.readyState = MockWebSocket.OPEN;if (this.onopen) {this.onopen(new Event('open'));}// 开始发送模拟数据this.startMockData();}, 500);}send(data) {if (this.readyState !== MockWebSocket.OPEN) {console.warn("WebSocket is not open. Current state:", this.readyState);return;}console.log('发送数据:', data);}close() {this.readyState = MockWebSocket.CLOSED;if (this.onclose) {this.onclose(new CloseEvent('close'));}if (this.mockInterval) {clearInterval(this.mockInterval);this.mockInterval = null;}}startMockData() {console.log("进入mock的数据")if (this.mockInterval) {clearInterval(this.mockInterval);}let counter = 0;const department = MockWebSocket.DEPARTMENTS[Math.floor(Math.random() * MockWebSocket.DEPARTMENTS.length)];this.mockInterval = setInterval(() => {counter = (counter % 50) + 1;const currentNumber = `A${counter.toString().padStart(3, '0')}`;const waitingQueue = [];for (let i = 1; i <= 10; i++) {const nextNum = (counter + i) <= 50? counter + i: (counter + i) % 50 || 50;waitingQueue.push(`A${nextNum.toString().padStart(3, '0')}`);}//这是传输过去的数据const data = {currentNumber:currentNumber,department: department,waitingQueue: waitingQueue};if (this.onmessage) {this.onmessage({data: JSON.stringify(data)});}}, 15000);}
}
http://www.dtcms.com/a/343172.html

相关文章:

  • 链游开发新篇章:融合区块链技术的游戏创新与探索
  • 什么是撮合引擎
  • 模型的量化-nf4和pf4
  • 基于STM32F103单片机智能门禁热释人体感应报警设计
  • C#串口单例 + 端口复用
  • LCD DMA day59
  • 为何vivo做了头显,小米却选择AI眼镜
  • 【GNSS基带算法】Chapter.2 相干积分与非相干积分
  • 基于 .NET Core Web API 请求 Nacos 配置中心的最佳实践
  • 微服务01-微服务架构:Java中的最佳实践
  • 业务扩展字段系统设计理念与流程图
  • LeetCode_动态规划
  • 【NLP(01)】NLP(自然语言处理)基础
  • nginx-自制证书实现
  • Python学习 -- MySQL数据库的查询及案例
  • 自然语言处理——03 RNN及其变体
  • C++ 命名规范示意表
  • iOS 应用上架瓶颈与解决方案 从开发到审核的全流程实战
  • 机器学习中的聚类与集成算法:从基础到应用
  • word参考文献对齐
  • week3-[循环嵌套]好数
  • 交易所开发实战:打造安全高效的数字货币交易平台
  • 使用java制作minecraft3.0版本
  • 什么是默克尔树
  • Android系统框架知识系列(十三):Sensor Manager Service - Android的感官世界
  • Trae配置rules与MCP
  • 企业微信+AI在金融行业落地:从部署到场景的实践路径
  • CLruCache::BucketFromIdentifier函数分析
  • CroCT
  • 在互联网大厂的Java面试:谢飞机的搞笑历险记