简单记录WebSocket

最近由于一个功能需求了解了 WebSocket ,刚好也想记录一下自己前端学习的过程,就记录一下

websocket 文档传送门: https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket

简单的了解一下 websocket

很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。
在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

上面是百度得到的,文字比较多,按照我的理解就是:前端想得到数据,就得向后端请求数据的接口,不去请求接口,前端拿不到需要的数据,当前端想得到数据但又不想频繁的去请求接口的时候 WebSocket 就能凸显出它的特点, 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息。

代码(以下用的地址参数为举例)

<template>
        <div>
              <div>
                <biaoqing @send="contentChange" :value="commentvalue" />
              </div>
         </div>
</template>

<script>
import biaoqing from './components/biaoqing/biaoqing.vue'

export default {
     components: {
        biaoqing
    },
    data () {
        return {
            commentData:[],
            commentvalue: '',
            socket: ""
        }
    },
    mounted () {
        // 初始化
        this.init()
    },
    methods: {
    contentChange(value) {
        if (value) {
          let obj = {
            a: "1",
            b: "2",
            c: "3",
            d: "4",
            e: "5"
          }
          this.socket.send(JSON.stringify(obj));
        } else {
          this.$message.error('不能发送空消息');
        }

      },
        init() {
            if(typeof(WebSocket) === "undefined"){
                alert("您的浏览器不支持socket")
            }else{
               
                let url = "ws://localhost:8080"
               // 实例化socket   wss:https, ws:http
                this.socket = new WebSocket(url);
                // 监听socket连接
                this.socket.onopen = this.open
                // 监听socket错误信息
                this.socket.onerror = this.error
                // 监听socket消息
                this.socket.onmessage = this.getMessage
                 //监听socket关闭
                this.socket.onclose  = this.close
            }
        },
        open() {
            console.log("socket连接成功")
        },
        error() {
            console.log("连接错误")
            // 连接建立失败重连
             this.init()
        },
        getMessage(msg) {
            console.log(msg.data)
            var data = eval("(" + msg.data + ")");
            var type = data.type;
          //初始化发送需要的参数,我的项目里 这里的参数是后端那边设置的,前端把后端需要的传过去
            let obj = {
               a: "1",
               b: "2",
               c: "3"
               }
            switch (type) {
            case 'init':
               this.socket.send(JSON.stringify(obj));
               break;
            case 'message':
            //数据发送成功后返回的数据  取出需要的数据加入显示的数据里
               var obj = {
                 a: data.a,
                 b: data.b,
                 c: data.c,
                 d: data.d,
                 e: data.e,
                }
               this.commentData.push(obj)
               break;
            case 'bind':
               console.log('绑定成功',data);
               break;
          case 'save':
              //这里可以写需要请求的接口
               $.ajax({
                        type:"POST",
                        url:"http://xxx.xxx",
                        dataType:"json",
                        data:你要传的参数,
                        success:function(result){
                            // console.log(result,msg);
                        }
                    });
                break;
             }
        },
        send() {
            this.socket.send(params)
        },
        close() {
            console.log("socket已经关闭")
        }
    },
    unmounted() {
      this.socket.close() //离开路由之后断开websocket连接
    },
}
</script>

以上是我写的示例,如果有不足之处,可以指出来哦 !!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值