我正在开发一个使用websockets的webapp,它可以和一个用python编写的服务器进行对话。我经常遇到这样的问题,VsCode中的端口转发似乎让死套接字保持活跃。下面是设置。
- 在webapp中,我打开了一个连接到服务器的WebSocket。如果服务器不存在,websocket调用error回调函数,我在这里销毁它(调用close并设置为null)。当这种情况发生时,我得到一个类似
Firefox can’t establish a connection to the server at ws://localhost:8765/
的错误。然后我在500毫秒后重试。 - 在Python服务器中,我使用了Websockets模块,我设计了一个同步 Package 器来 Package 异步库,因为我的Python应用程序是同步的,这个 Package 器是here。
- 当我开发的时候,我的服务器运行在一个Ubuntu虚拟机中,webapp存储在同一个虚拟机中。我使用VsCode LiveServer插件来服务webapp(通过ssh插件)。
所以,为了让这个设置工作,LiveServer自动转发端口5500,这使得我的webapp可以通过localhsot:5500在我的windows机器上使用。这一直工作得很完美。现在,为了让我的webapp(在我的Windows Firefox浏览器上运行)与Ubuntu上的python服务器通信,我还手动转发端口8765(我使用的端口)。
一切正常(一般情况下)。但是如果我先启动webapp,在服务器关闭的情况下启用端口转发,我就会遇到问题。正如前面提到的,webapp无法连接并一次又一次地重试。所有这些套接字,虽然在浏览器端关闭,但似乎在vscode端口转发功能中保持活跃。一旦发生这种情况,即使我启动服务器,webapp一直处于连接失败状态,直到我停止/启动端口转发;然后vscode刷新所有到服务器的缓冲套接字,它开始接收一堆传入的连接,这些连接都立即关闭。
2023-02-22 21:38:10.281 [INFO] <WebsocketClientHandler> Client disconnected (ID=54a78428e6444e2f8f0db88773f5e544). 0 clients remainings
2023-02-22 21:38:10.282 [INFO] <WebsocketClientHandler> New client connected (ID=d2a266bf93f84fa2b6b70523e15543e0). 1 clients total
2023-02-22 21:38:10.294 [INFO] <WebsocketClientHandler> Client disconnected (ID=d2a266bf93f84fa2b6b70523e15543e0). 0 clients remainings
2023-02-22 21:38:10.295 [INFO] <WebsocketClientHandler> New client connected (ID=7687380cb1de4d13b2460f904dfaae2f). 1 clients total
2023-02-22 21:38:10.307 [INFO] <WebsocketClientHandler> Client disconnected (ID=7687380cb1de4d13b2460f904dfaae2f). 0 clients remainings
2023-02-22 21:38:10.307 [INFO] <WebsocketClientHandler> New client connected (ID=b8cb24da688b44d0a3a3f4c518b00732). 1 clients total
2023-02-22 21:38:10.318 [INFO] <WebsocketClientHandler> Client disconnected (ID=b8cb24da688b44d0a3a3f4c518b00732). 0 clients remainings
2023-02-22 21:38:10.319 [INFO] <WebsocketClientHandler> New client connected (ID=8d929c0b816c4888a846a1af24e545cd). 1 clients total
2023-02-22 21:38:10.330 [INFO] <WebsocketClientHandler> Client disconnected (ID=8d929c0b816c4888a846a1af24e545cd). 0 clients remainings
2023-02-22 21:38:10.330 [INFO] <WebsocketClientHandler> New client connected (ID=f0d99dbeb5cd44619f3953fc54e42a1f). 1 clients total
2023-02-22 21:38:10.343 [INFO] <WebsocketClientHandler> Client disconnected (ID=f0d99dbeb5cd44619f3953fc54e42a1f). 0 clients remainings
2023-02-22 21:38:10.346 [INFO] <WebsocketClientHandler> New client connected (ID=99265e71358c4a58bafb1b18c320970e). 1 clients total
2023-02-22 21:38:10.357 [INFO] <WebsocketClientHandler> Client disconnected (ID=99265e71358c4a58bafb1b18c320970e). 0 clients remainings
2023-02-22 21:38:10.358 [INFO] <WebsocketClientHandler> New client connected (ID=671bffa2d5164b0599006f5fc8ef7766). 1 clients total
2023-02-22 21:38:10.369 [INFO] <WebsocketClientHandler> Client disconnected (ID=671bffa2d5164b0599006f5fc8ef7766). 0 clients remainings
为了避免出现任何问题,我需要按照以下顺序开始:端口转发、服务器、webapp。如果代理中有一些“死套接字”,我要么通过停止/启动端口转发来清除它们,要么重新启动vscode。有时候停止/启动是不够的,vscode似乎永远不会恢复;在这种情况下,我重新启动它,一切都恢复正常。
那么,我是做错了什么还是VsCode端口转发很弱?当我在本地工作时,我从来没有遇到过问题
1条答案
按热度按时间6qqygrtg1#
刚刚发现微软有一个公开的bug。我所有的websocket都处于WAIT_CLOSE状态。
https://github.com/microsoft/vscode-remote-release/issues/3561