[英]SockJS connected as websocket, but nothing going through
在特定的访问网络上使用SockJS时遇到一个问题。 它认为这与SockJS根据网络状态选择最佳传输协议(websocket,长轮询等)的方式有关。
使用Web浏览器,我的SockJS客户端通过websocket传输协议连接到我的节点SockJS服务器。 我什至在节点上看到“连接时”事件。 但是,当我发送数据时,没有任何数据通过。 为了详尽无遗,它在某些其他访问网络中也能很好地工作。
根据网站http://websocketstest.com/的结果,此访问网络的状态有点特殊:对于WebSockets(端口80),它的作用是:
Connected Yes✔
Data Receive Yes✔
为确保websocket正常运行,测试服务器还应每秒钟更新一次“服务器时间”行。 既然不是这样,我很确定我有一个透明的HTTP代理,它断开了websocket的连接。
但是,SockJS不会发现这一点,也不会切换到后备协议。 我以为是这样做的。
我是否对SockJS的传输协商功能感到误解?
Socket.IO
在这种情况下还是在具有透明HTTP代理的这种访问网络中是否更强大?
我知道我可以将SockJS与SSL一起使用,但是我认为这是一个后备而非真正的解决方案。
我认为您对SockJS的传输协商功能有误。 SockJS是一个websocket仿真。 SockJS的行为就像websockets。 确实,如果客户端支持 websocket,则将使用它们。 但是,当然,某些浏览器不支持websockets,这是SockJS处理的。 后备机制用于查找客户端支持的传输,而不是网络支持的传输。
SockJS反复遍历传输直到找到成功的连接这一事实在某种程度上误导了其试图执行的操作。 它不会处理网络以某种方式断开websocket的情况,好像websocket已连接,或者是其他任何看起来已连接的传输方式(通过读取连接状态)却无法通过数据的情况。
您有责任确保数据通过网络传输,并且如果您打算这样做,还必须保持连接状态。 这些东西不在websocket的范围内,因此不在SockJS的范围内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.