问题场景:在进入到一个页面时,我会在webworker中创建一个eventsource用来接收后端推送的信息,但是页面销毁时没有正确关闭掉eventsource,导致阻塞了一个TCP连接,反复多次之后我发现主线程的http请求也被阻塞了,这是为什么呢?webworker中的请求不是不会影响主线程吗?
问题场景:在进入到一个页面时,我会在webworker中创建一个eventsource用来接收后端推送的信息,但是页面销毁时没有正确关闭掉eventsource,导致阻塞了一个TCP连接,反复多次之后我发现主线程的http请求也被阻塞了,这是为什么呢?webworker中的请求不是不会影响主线程吗?
Web Workers 是浏览器提供的一种在后台线程中运行 JavaScript 的方式,它们不会共享任何资源,包括网络连接。因此,理论上,一个未关闭的 Web Worker 中的 TCP 连接不会影响主线程中的其他 HTTP 请求。
然而,你的问题中描述的情况可能是由于某种资源限制或阻塞造成的。这里有几个可能的原因:
为了解决这个问题,你应该确保在 Web Worker 中的任何网络连接在使用完毕后都被正确关闭。这可以通过调用 EventSource.close()
方法来完成。此外,如果你的应用程序需要大量的并行连接,你可能需要考虑增加浏览器的并行连接数限制(通过在服务器端设置合适的 keep-alive
和 connection
头部)或者重构你的应用程序以减少并发的需求。
6 回答3k 阅读✓ 已解决
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决