WebSocket

一、什么是websocket

 1、介绍 

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送

2、与http协议的比较

因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

websocket的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

 相比较于http做轮询,提高了效率,减少了资源的浪费。

二、websocket的使用

1、WebSocket 属性

Socket.readyState

0 - 表示连接尚未建立。
1 - 表示连接已建立,可以进行通信。
2 - 表示连接正在进行关闭。
3 - 表示连接已经关闭或者连接不能打开。

2、websocket事件

 var socketUrl = `  `;
        socketUrl = socketUrl.replace("https", "ws").replace("http", "ws");
      //打开事件
        this.socket.onopen = function () {
          console.log("websocket已打开");
          //socket.send("这是来自客户端的消息" + location.href + new Date());
        };
        //获得消息事件
        let that = this;
        this.socket.onmessage = function (msg) {
          console.log(msg.data);
          that.reply = JSON.parse(msg.data);
          //console.log(that.reply);
          that.list.push(that.reply);
          console.log(that.list);
          //发现消息进入    开始处理前端触发逻辑
        };
        //关闭事件
        this.socket.onclose = function () {
          console.log("websocket已关闭");
        };
        //发生了错误事件
        this.socket.onerror = function () {
          console.log("websocket发生了错误");
        };
//发送消息
sendMessage() {
      if (
        this.sendMes.message === "" ||
        this.sendMes.message.match(/^\s+$/) ||
        this.sendMes.message === null
      )
       { return this.$message({
          type: "error",
          message: "请勿发送空白消息",
        })}
       else {
        let obj = {};
        obj.message = this.sendMes.message;
        obj.fromUserId = this.sendMes.fromUserId;
        // obj.time = this.sendMes.time;
        obj.time=new Date().getHours() + "." + new Date().getMinutes(),
        this.list.push(obj);
        console.log(this.list);
        if (typeof WebSocket == "undefined") {
          console.log("您的浏览器不支持WebSocket");
        } else {
          console.log("您的浏览器支持WebSocket");
          console.log(
            '{"toUserId":"' +
              this.toUserId +
              '","message":"' +
              this.sendMes.message +
              '"}'
          );

          this.socket.send(
            '{"toUserId":"' +
              this.toUserId +
              '","message":"' +
              this.sendMes.message +
              '"}'
          );
            this.sendMes.message = "";
        }
      }
    },

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值