NodeJS将ws对象传递给子进程

时间:2017-02-15 19:32:27

标签: node.js tcp process websocket subprocess

我试图将ws对象传递给子进程。

在"发送"下的子进程(https://nodejs.org/api/child_process.html)下的节点文档中。函数它表示第二个参数可以是一个TCP对象,其中的子对象是父母可以分享。

当我尝试传递ws对象时,它会说"抛出新的TypeError('此句柄类型无法发送');"。我猜它是因为它是一个ws对象而不是一个tcp对象,但我想知道是否还有与ws对象而不是tcp对象实现相同的效果......?因为ws只是符合websocket标准的tcp对象的包装器。

1 个答案:

答案 0 :(得分:5)

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

WebSockets完全不同。它们是第7层(HTTP)连接之上的隐喻构造。在第5层以上,应用程序本身进行了超出操作系统提供的相当多的通信 - 处理标头,cookie,WS连接状态等。这不仅可以在整数句柄中编码,因此Node当前不会有办法传递它们。

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