WebSocket状态码及异常报错1006


1.WebSocket协议简介

WebSocket协议是一种基于TCP的协议,它通过在浏览器和服务器之间建立一条持久的双向通信通道,实现了实时的数据传输。与HTTP协议相比,WebSocket协议具有以下特点:

双向通信:WebSocket协议允许服务器主动向客户端推送数据,客户端也可以向服务器发送数据。
实时性:WebSocket协议可以实现实时的数据传输,无需频繁建立和关闭连接。
低延迟:由于WebSocket协议使用的是长连接,可以减少网络传输的延迟。
节省带宽:WebSocket协议使用的是二进制数据格式,相比于HTTP协议的文本数据格式,可以节省带宽。
在这里插入图片描述

2.WebSocket状态码的作用:

WebSocket断开时,会触发CloseEvent, CloseEvent会在连接关闭时发送给使用 WebSockets 的客户端. 它在 WebSocket 对象的 onclose 事件监听器中使用。
CloseEvent的code字段表示了WebSocket断开的原因。
可以从该字段中分析断开的原因。

CloseEvent有三个字段需要注意, 通过分析这三个字段,一般就可以找到断开原因:

  • CloseEvent.code: code是错误码,是整数类型
  • CloseEvent.reason: reason是断开原因,是字符串
  • CloseEvent.wasClean: wasClean表示是否正常断开,是布尔值。一般异常断开时,该值为false

在这里插入图片描述

3.WebSocket状态码1006详解

状态码1006表示连接已关闭,无法建立连接。具体含义如下:

  • 当客户端或服务器在建立WebSocket连接时发生异常,连接将被关闭,状态码1006将被返回。
  • 通常情况下,状态码1006表示网络连接中断、服务器宕机或其他无法建立连接的错误。

与其他状态码相比,状态码1006的特点是无法建立连接,通常是由于网络问题或服务器故障引起的。解决状态码1006的常见方法包括:

  • 检查网络连接是否正常。
  • 检查服务器是否正常运行。
  • 检查服务器配置是否正确。

1.问题原因

出现此报错通常和代理层不支持或者未开通websocket协议长连接导致。

在这里插入图片描述

如果出现心跳连接几次后断开连接报错1006的情况原因为:

建立连接后,还没等收到心跳信息(隔30s才会收到)时,nginx配置的proxy_read_timeout 就已经超时了。
解决方法为: proxy_read_timeout 1h;#设置代理服务器读取后端服务器响应的超时时间为1H

2.解决方案

WebSocket 和HTTP虽然是不同协议,但是两者“握手”方式兼容。通过HTTP升级机制,使用HTTP的Upgrade和Connection协议头的方式可以将连接从HTTP升级为WebSocket。

location / {
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;  #添加支持websocket协议
     proxy_set_header Connection upgrade;      #添加支持websocket协议
     proxy_pass http://server-9003;
     proxy_read_timeout 1h;#设置代理服务器读取后端服务器响应的超时时间为1H
     proxy_connect_timeout 60s;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值