> 技术文档 > WebSocket状态码及异常报错1006_websocket 1006断开连接

WebSocket状态码及异常报错1006_websocket 1006断开连接


文章目录

  • 1.WebSocket协议简介
  • 2.WebSocket状态码的作用:
  • 3.WebSocket状态码1006详解
    • 1.问题原因
    • 2.解决方案

1.WebSocket协议简介

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

双向通信:WebSocket协议允许服务器主动向客户端推送数据,客户端也可以向服务器发送数据。
实时性:WebSocket协议可以实现实时的数据传输,无需频繁建立和关闭连接。
低延迟:由于WebSocket协议使用的是长连接,可以减少网络传输的延迟。
节省带宽:WebSocket协议使用的是二进制数据格式,相比于HTTP协议的文本数据格式,可以节省带宽。
WebSocket状态码及异常报错1006_websocket 1006断开连接

2.WebSocket状态码的作用:

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

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

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

WebSocket状态码及异常报错1006_websocket 1006断开连接

3.WebSocket状态码1006详解

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

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

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

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

1.问题原因

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

WebSocket状态码及异常报错1006_websocket 1006断开连接

如果出现心跳连接几次后断开连接报错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; }}