阅读 214

webSocket使用及vue中封装使用(客户端和服务端搭建)

当时由于c++同事当时出差,于是自学了webSocket并用node搭建了一个简单的服务端用来自己调试,当时就感觉到求人不如求己啊。 P.s:参考的有网上的文章,珠峰全栈里的webSocket、黑马pink老师B站里的另一个老师的实战项目课程里的

webSocket相关基础内容请查看

内容待更新

一、搭建node服务端

1、安装node环境

2、安装nodejs-websocket

控制台输入命令

npm install nodejs-websocket 复制代码

3、新建socket.js文件

socket.js

const ws = require("nodejs-websocket"); console.log("开始建立连接...") const socket = ws.createServer(function(conn){     conn.on("text", function (str) {         console.log("message:"+str)         let msg = "你好,这里是是日前端~"         // let msg = 'websocket处于正常状态'         setInterval(() => {             conn.sendText(msg);         }, 3000)     })     conn.on("close", function (code, reason) {         console.log("关闭连接")     });     conn.on("error", function (code, reason) {         console.log("异常关闭", code, reason)     }); }).listen(8666) console.log("WebSocket建立完毕") module.exports = socket 复制代码

4、运行该js文件看到如下日志即可

在这里插入图片描述

二、客户端直接调用

1、新建test.html文件

test.html

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title> </head> <body> <div id="test"></div> <script>     if(window.WebSocket){         var ws = new WebSocket('ws://localhost:8666');         ws.onopen = function(e){             console.log("连接服务器成功");             // 向服务器发送消息             ws.send("来自客户端的消息");         }         ws.onclose = function(e){             console.log("服务器关闭");         }         ws.onerror = function(){             console.log("连接出错");         }         // 接收服务器的消息         ws.onmessage = function(e){             let message = "message:"+e.data+"";             console.log(message);             document.getElementById('test').innerHTML = message         }     } </script> </body> </html> 复制代码

2、浏览器运行,看到控制台日志如下即成功

在这里插入图片描述

三、Vue中函数封装使用

1、新建socket_service.js

socket_service.js

export default class SocketService {   /**    * 单例    */   static instance = null   static get Instance() {     if (!this.instance) {       this.instance = new SocketService()     }     return this.instance   }   // 和服务端连接的socket对象   ws = null   // 存储回调函数   callBackMapping = {}   // 标识是否连接成功   connected = false   // 记录重试的次数   sendRetryCount = 0   // 重新连接尝试的次数   connectRetryCount = 0   //  定义连接服务器的方法   connect() {     // 连接服务器     if (!window.WebSocket) {       return console.log('您的浏览器不支持WebSocket')     }     this.ws = new WebSocket('ws://localhost:1234')     // 连接成功的事件     this.ws.onopen = () => {       console.log('连接服务端成功')       this.connected = true       // 重置重新连接的次数       this.connectRetryCount = 0     }     //   // 1.连接服务端失败     //   // 2.当连接成功之后, 服务器关闭的情况(连接失败重连)     this.ws.onclose = () => {       console.log('连接服务端失败')       this.connected = false       this.connectRetryCount++       setTimeout(() => {         this.connect()       }, 500 * this.connectRetryCount)     }     // 得到服务端发送过来的数据     this.ws.onmessage = msg => {       console.log('从服务端获取到了数据' + msg.data)       // if (this.callBackMapping) {         // this.callBackMapping.call(this, dataList)       // }     }   }   // 回调函数的注册   registerCallBack (callBack) {     console.log('回调函数的注册', callBack)     this.callBackMapping = callBack   }   // 取消某一个回调函数   unRegisterCallBack(callBack){     console.log('取消某一个回调函数', callBack)     this.callBackMapping = null   }   // 发送数据的方法   send (data) {     // 判断此时此刻有没有连接成功     if (this.connected) {       this.sendRetryCount = 0       this.ws.send(data)     } else {       this.sendRetryCount++       setTimeout(() => {         this.send(data)       }, this.sendRetryCount * 500)     }   } } 复制代码

2、在main.js中全局引入实例并挂载到原型

import SocketService from '@/server/socket_service' // 对服务端进行websocket的连接 SocketService.Instance.connect() Vue.prototype.$socket = SocketService.Instance 复制代码

3、在vue组件中使用发送(客户端向服务端发送数据)

this.$socket.send(‘这是客户端发送的数据’) 复制代码

4、在vue组件中使用接收(客户端接收服务端发送的数据)

1)注册回调函数
created(){     // 注册回调函数     this.$socket.registerCallBack(this.testData)   } 复制代码

2)取消回调函数
destroyed(){     // 取消回调函数     this.$socket.unRegisterCallBack(this.testData)   }, 复制代码

3)接收到数据data
testData(data) {       console.log('获取到传感器websocket数据', data) }


作者:是日前端
链接:https://juejin.cn/post/6988052281627246606


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐