作者:萌萌虾 | 来源:互联网 | 2023-02-11 18:10
我正在尝试将ws对象传递给子进程.
在"发送"功能下的子进程(https://nodejs.org/api/child_process.html)下的节点文档中,它表示第二个参数可以是子对象和父进程可以共享的TCP对象.
当我尝试传递一个ws对象时,它会说"抛出新的TypeError('这个句柄类型不能被发送');".我想这是因为它是一个ws对象,而不是一个tcp对象,但我想知道是否还有用ws对象而不是tcp对象实现相同的效果......?因为ws只是符合websocket标准的tcp对象的包装器.
1> Chad Robinso..:
不幸的是,WS套接字不是原始TCP对象.TCP套接字是第4层结构,可以作为原始句柄在进程之间传递(基本上,整数,在大多数底层操作系统隐喻中).操作系统本身处理所有TCP操作,如会话状态管理,这在进程时很重要想要传递手柄.
WebSockets完全不同.它们是第7层(HTTP)连接之上的隐喻构造.在第5层以上,应用程序本身进行了超出操作系统提供的相当多的通信 - 处理标头,COOKIE,WS连接状态等.这不仅可以在整数句柄中编码,因此Node当前不会有办法传递它们.
通常,大多数需要以这种方式传递连接的应用程序接受原始级别的TCP连接,将THAT传递给子级,然后允许子级从那里处理HTTP(和WS).他们不在主进程和子进程之间共享这项工作.对不起,这不是你想要的答案,但如果你已经围绕这个期望,你的应用程序架构将需要重新思考.顺便说一句,不仅仅是Node就是这样的.这也适用于任何其他语言,如Python或Ruby,因为所有这些只是Berkeley套接字结构的高级包装,并且该层中的套接字传递是基于句柄的,如上所述.