为何SharedWorker不为每个客户端仅暴露一个端口?
基础示例
先看一段 SharedWorker 侧接收客户端连接的示例代码(通常放在类似 worker.js 文件中运行):
onconnect = evt => { // evt 对应客户端的连接请求 const port = evt.ports[0]; port.onmessage = msg => { // msg 是客户端发来的消息内容 // 可以通过 port.postMessage 给客户端回复 }; };
核心疑问
为什么
evt.ports是一个数组(可能包含多个端口)?SharedWorker 会在什么场景下给单个客户端连接提供多个端口?这些多端口代表什么含义?是连接同一客户端的不同通信通道吗?多端口能否在操作系统层面提升通信带宽?上面的示例代码只处理了数组中的第一个端口,是不是应该始终改用下面这种遍历所有端口的写法?
onconnect = evt => { // evt 对应客户端的连接请求 for (const port of evt.ports) { // 为每个端口监听消息 port.onmessage = msg => { // msg 是客户端发来的消息内容 // 可以通过 port.postMessage 给客户端回复 }; } };
内容的提问来源于stack exchange,提问作者Gershom Maes
相关产品推荐
相关产品推荐

