IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Vue-WebSocket原理及使用 -> 正文阅读

[网络协议]Vue-WebSocket原理及使用

1、简介

????????以前的http协议通信只能由客户端发起。如果我们想要了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。http协议做不到服务器主动向客户端推送信息。之前的做法就是使用轮询,每隔一段时间,就请求接口,了解服务器有没有新的信息,但是它效率低下,且非常浪费资源。WebSocket就诞生了,它最大特点就是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

2、构造函数

let ws = new WebSocket(wsServer);

3、属性

(1)webSocket.readyState

  • 0(WebSocket.CONNECTING):正在连接中,但还未建立
  • 1(WebSocket.OPEN):连接已经建立,可以进行通信
  • 2(WebSocket.CLOSING):连接正在关闭
  • 3(WebSocket.CLOSED):连接已关闭或者打开连接失败

(2)webSocket.onopen

????????定义一个事件处理程序,当readyState?变为1时调用,用于指定连接成功后的回调函数。

ws.onopen = () => {
    console.log('连接已经建立,可以进行通信');
}

(3)webSocket.onmessage

????????当收到来自服务器的消息时被调用。

ws.onmessage = (e) => {
    let data = JSON.parse(e.data);
    console.log('接受到信息', data);
}

(4)webSocket.onclose

????????用于指定连接关闭后的回调函数。

ws.onclose = () => {
    console.log('服务器已经断开');
}

(5)webSocket.onerror

????????用于指定报错时的回调函数。

ws.onclose = (e) => {
    console.log(e);
}

4、方法

(1)webSocket.send()

????????用于向服务器发送数据。

function fn(data) {
   if (ws.readyState === WebSocket.OPEN) {
          ws.send(data);
   } else {
      // Do something else in this case.
   }
}

(2)webSocket.close()

?????????关闭 WebSocket连接或连接尝试。

ws.close();

5、Vue中使用WebScoket

<script>
    export default {
        name: 'Home',
        data() {
            return {
                ws: null,
            }
        },
        methods: {
            // 启动websocket 获取列表数据
            initWebSocket() {
                var _this = this;
                var wsServer = 'ws://' +
                    location.href.split('?')[1].split('&')[1].split('=')[1] + ':' +
                    location.href.split('?')[1].split('&')[2].split('=')[1] + '/xxwwgkq/ws?deviceId=' +
                    location.href.split('?')[1].split('&')[0].split('=')[1];
                var limitConnect = 3;  // 断线重连次数
                var timeConnect = 0;  // 当前重连次数
                console.log(wsServer);
                init();

                // 初始化webSocket
                function init() {
                    _this.ws = new WebSocket(wsServer);
                    _this.ws.onopen = () => {
                        console.log('TCP已连接');
                    }
                    _this.ws.onmessage = (e) => {
                        let data = JSON.parse(e.data);
                        console.log('接受到信息', data);
                    }
                    _this.ws.onclose = () => {
                        console.log('服务器已经断开');
                        reconnect();
                    }
                }

                // 重连
                function reconnect() {
                    if (limitConnect > 0) {
                        limitConnect--;
                        timeConnect++;
                        console.log('第' + timeConnect + '次重连');
                        setTimeout(function () {
                            init();
                        }, 2000)
                    } else {
                        console.log('TCP连接已超时');
                    }
                }
            },

            //关闭websocket
            closeWebSocket() {
                if (this.ws) {
                    this.ws.close();
                    this.ws.onclose = function () {
                        console.log('websocket已关闭');
                    }
                }
            },
        },
        mounted() {
            //绑定事件
            window.addEventListener('beforeunload', () => this.closeWebSocket())
            this.initWebSocket();
        },
        beforeDestroy() {
            //卸载事件
            window.removeEventListener('beforeunload', () => this.closeWebSocket());
        },
    }
</script>
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:34:09  更:2021-08-03 11:34:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 5:21:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码