NodeJS将一个ws对象传递给一个subprocess

我试图将ws对象传递给subprocess。

在“send”函数下的subprocess( https://nodejs.org/api/child_process.html )下的节点文档中,它表示第二个参数可以是子对象可以共享的TCP对象。

当我尝试传递一个ws对象时,它说:“抛出新的TypeError('这个句柄types不能被发送');”。 我想这是因为它是一个WS对象,而不是一个TCP对象,但我想知道是否有无论如何实现与WS对象,而不是一个TCP对象相同的效果…? 由于ws只是符合websocket标准的tcp对象的一个​​包装。

不幸的是,一个WS套接字不是一个原始的TCP对象。 TCP套接字是第4层结构,可以作为原始句柄(基本上是整数,在大多数底层操作系统隐喻中)在进程之间传递。操作系统本身处理所有的TCP操作,如会话状态pipe理,当进程想要通过左右手柄。

WebSockets是完全不同的。 它们是在第7层(HTTP)连接之上的隐喻结构。 在层5+中,应用程序本身做了超出操作系统提供的相当多的通信 – 处理标题,cookie,WS连接状态等等。这不止是可以用整数句柄编码,所以Node当前不有办法把它们传给他们

通常情况下,需要连接的大多数应用程序都以这种方式传递TCP连接,将THAT传递给subprocess,然后让孩子从那里处理HTTP(和WS)。 他们不分享主人和孩子之间的工作。 对不起,这不是你想要的答案,但是如果你已经围绕这个期望来构build,你的应用程序架构将需要重新思考。 顺便说一下,Node不仅仅是这样。 这也适用于任何其他语言,比如Python或Ruby,因为所有这些只是Berkeley Sockets构造的高级包装,并且在该层传递的套接字是基于句柄的,如上所述。