美文网首页程序员
如何给WebScoket设置请求头

如何给WebScoket设置请求头

作者: 八月方便面 | 来源:发表于2022-09-07 19:41 被阅读0次

前言:ws连接不能像http一样自定义请求头,但是可以通过官方提供的Sec-WebSocket-Protocol属性,与后端约定好,当作特定的请求头属性来进行前后端的通信。

一、官方定义

varaWebSocket=newWebSocket(url [, protocols]);

url要连接的URL;这应该是WebSocket服务器将响应的URL。

protocols 可选一个协议字符串或者一个包含协议字符串的数组。这些字符串用于指定子协议,这样单个服务器可以实现多个WebSocket子协议(例如,您可能希望一台服务器能够根据指定的协议(protocol)处理不同类型的交互)。如果不指定协议字符串,则假定为空字符串。

二、ws报错:Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received

解决:前后端配合,前端请求头与后端响应报文都设置'Sec-WebSocket-Protocol',并且值相同

代码如下:

initSysWebsocket() {

    //在mounted里调用

            try {

                if ('WebSocket' in window) {

                    // console.log(this.$store.getters.userId)

                    // 正式环境参数

                    // this.wsUrl是连接路径,需要在data()里自己定义

                    console.log(this.wsBaseUrl)

                    let wsUrl = `${this.wsBaseUrl}/websocket/speed`

                    this.websocket = new WebSocket(wsUrl, ['-1'])//设置Sec-WebSocket-Protocol的值

                    console.log(this.websocket)

                    this.initWebSocket()

                } else {

                    alert('当前浏览器 不支持')

                }

                } catch (e) {

                    console.log('尝试创建连接失败')

                // 如果无法连接上webSocket 那么重新连接!可能会因为服务器重新部署,或者短暂断网等导致无法创建连接

                    this.reConnectFn()

                }

},

reConnectFn() {

        // 重连函数

            let that = this

            if (this.isConnect) return

            this.reConnect && clearTimeout(this.reConnect)

            // 延迟5秒重连  避免过多次过频繁请求重连

            this.reConnect = setTimeout(() => {

                that.initWebSocket()

            }, 5000)

},

initWebSocket() {

            this.isConnect = true

            // 连接错误

            this.websocket.onerror = this.setErrorMessage

            // 连接成功

            this.websocket.onopen = this.setOnopenMessage

            // 收到消息的回调

            this.websocket.onmessage = this.setOnmessageMessage

            // 连接关闭的回调

            this.websocket.onclose = this.setOncloseMessage

            // 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

            window.onbeforeunload = this.onbeforeunload

},

setErrorMessage() {

            this.isConnect = false

            // 调用重连函数

            this.reConnectFn()

            console.log('WebSocket连接发生错误   状态码:' + this.websocket.readyState)

},

setOnopenMessage() {

            console.log('WebSocket连接成功    状态码:' + this.websocket.readyState)

            let idList =['1566969888304496642', '1564571161175465985']

            this.websocketsend(JSON.stringify(idList));

},

 websocketsend(Data) { // 数据发送

            console.log(Data, 'Data')

            this.websocket.send(Data);

},

setOnmessageMessage(event) {

            console.log(event, 'event')

        // 根据服务器推送的消息做自己的业务处理

            let json = JSON.parse(event.data)

            // 获取标签数据

            let markerData = json

            console.log(markerData)

},

setOncloseMessage() {

            this.isConnect = false

        // 重连

            this.reConnectFn()

            console.log('WebSocket连接关闭    状态码:' + this.websocket.readyState)

},

onbeforeunload() {

            console.log(123)

            this.closeWebSocket()

        },

closeWebSocket() {

            this.websocket.close()

},

相关文章

  • 如何给WebScoket设置请求头

    前言:ws连接不能像http一样自定义请求头,但是可以通过官方提供的Sec-WebSocket-Protocol属...

  • AFnetworking请求头

    AFNetworking的请求头设置(token) 主题 : 使用afnetworking post 如何设置请求...

  • go实现http的Get和Post请求

    设置header和body的post请求 设置请求头和不设置请求头请求body的get请求 即设置header又设...

  • 前端实现登陆态的3种方法

    摘要 cookie 全局设置请求头 全局设置请求字段

  • axios

    设置请求头

  • SDWebImage-SDWebImageManger

    SDWebImage 下载图片的设置请求头参数: 在SDWebImageManager 管理器中设置请求头参数 在...

  • Feign传递请求头信息(Finchley版本)

    例子一:Feign如何统一 添加header参数 例子二: 例子三:设置请求头和请求body 注册配置 这个文件放...

  • requests的使用

    1、安装 2、requests 设置 设置请求头 设置超时时间 auth 认证 3、requests 请求 GET...

  • ajax请求头设置

    ajax有很多请求头但是我好长时间都没有弄明白,今天我专门上查了一下资料,整理了一些比较常用的请求头 设置请求头前...

  • cookie详细讲解

    cookie是如何工作的 图中响应头中带有的设置的cookie字段,请求头带有cookie字。请求头中带给后台是浏...

网友评论

    本文标题:如何给WebScoket设置请求头

    本文链接:https://www.haomeiwen.com/subject/ucbonrtx.html