我有一个小超文本传输协议+ WebSocket服务器托管在亚马逊VPS。Index.html使用JS代码连接WebSocket服务器并与之交换数据。当我使用公网IP或域名直接连接我的服务器时,一切正常。
但是,我不希望此服务器公开,因此我将OpenVPN配置为私下连接到此服务器。
有时在OpenVPN上一切都能正常工作,当我在浏览器(Chrome或Opera)中输入本地(内部)服务器的IP地址时,它会成功地加载index.html,连接我的WebSocket服务器,并通过WebSocket连接成功地交换数据。但有时(或几天)在Websocket连接建立后1秒,浏览器会关闭它,错误代码为1006,并且没有任何说明。我的脚本尝试在此之后1秒重新连接WebSocket,但结果始终相同。
我不明白为什么有时一切都能正常工作,而有时我又不能在OpenVPN上使用WebSocket几个小时。
有人能描述一下为什么在OpenVPN上使用WebSocket时会出现错误1006,以及如何通过编码或重新配置Chrome、Opera或OpenVPN来消除错误吗?
发布于 2020-08-29 04:39:47
我发现只有当WS连接的任何一端发送大型消息时,问题才会发生。
我猜想,如果在浏览器和WebSocket服务器之间有一些中间件,比如虚拟专用网、防火墙或代理,那么大的WS消息可能会超过中间件的某些内部包大小或限制,从而在消息传输过程中中断浏览器和服务器之间的连接。这种意外的断开会在浏览器中导致错误1006。
如果您的客户端遇到意外断开并返回错误1006,请尝试最小化您的应用编程接口的WebSocket消息大小。如果您需要发送大量数据,则不要将其作为一个块发送。你最好把它切成小片,然后多发几条短信。
https://stackoverflow.com/questions/63457584
复制相似问题