当我落后于OpenVPN时,浏览器在建立WebSocket连接后一秒钟以错误1006关闭

问题描述

我在Amazon VPS上托管了小型HTTP + WebSocket服务器。 Index.html具有用于连接WebSocket服务器并与其交换数据的JS代码。当我直接使用公共IP或域名连接服务器时,一切正常。

但是,我不想将此服务器公开,因此我将OpenVPN配置为私下连接到该服务器。

有时候,一切都可以通过OpenVPN正常运行,当我在浏览器(Chrome或Opera)中输入本地(内部VPN)服务器的IP地址时,它会成功加载index.html,连接我的WebSocket服务器并通过WebSocket连接成功交换数据。 但是有时(或几天)Websocket连接建立后1秒钟,浏览器将关闭它,错误代码为1006,没有任何描述。我的脚本尝试在此后1秒钟重新连接WebSocket,但结果始终是相同的。

我不知道为什么有时候一切都正常,有时候我几个小时都无法通过OpenVPN使用WebSocket。

有人可以描述为什么在OpenVPN上使用WebSocket时会发生错误1006,以及如何通过编码或重新配置Chrome,Opera或OpenVPN来消除错误?

解决方法

我发现问题仅在WS连接的任何一方发送大消息时才会发生。

我猜想,如果在浏览器和WebSocket服务器之间存在诸如VPN,防火墙或代理之类的中间件,那么大的WS消息可能会超出内部包的某些数据包大小或该中间件的限制,并且在消息发送期间会中断浏览器和服务器之间的连接转让。这种意外的断开连接会导致浏览器中出现错误1006。

如果您的客户端遇到意外断开并出现错误1006,请尝试最小化API的WebSocket消息大小。如果您需要发送大量数据,请不要一小块发送。您最好将其切成薄片并发送多条短消息。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...