寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例
Posted
技术标签:
【中文标题】寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例【英文标题】:Looking for an example on how to pass file descriptors with either socket.io or IPC 【发布时间】:2016-11-15 21:16:21 【问题描述】:我使用终端启动 Node.js process A
。
进程 A 使用 child_process.spawn 启动 process B
。
反过来,process B
启动工作进程,它们都是同一类型,我们称它们为 process(es) C
。
我希望 C 进程写入原始终端,但我希望 B 进程写入日志文件。
为了实现这一点,我目前的想法是,我必须使用 IPC 或 socket.io 将代表当前终端的文件描述符传递给进程 B。
我正在寻找有关如何使用 IPC/socket.io 传递文件描述符但空手而归的示例。
我真的在寻找两篇关于信息的文章:
(a) 如何获取代表当前终端的文件描述符 (在最基本的情况下,那些 fd 只是整数 0,1,2 stdin、stdout 和 stderr,但我认为这些不适用于我的 案例)。
(b) 我正在寻找一个关于如何通过 IPC 传递 fd 的代码示例 节点.js。 (如果可能的话,Socket.io 也可以正常工作)。
【问题讨论】:
【参考方案1】:根据我的简短研究,文件描述符似乎只是整数,因此可以使用 JSON 传递它们,如下所示:
JSON.stringify(fd: 18);
你可以在 Node.js 或 socket.io 中使用 IPC 传递这些数据。
虽然,我的研究还表明,仅仅因为你手头有一个“代表文件描述符”的整数,这并不能给你太多保证。
更多信息:
如果你在终端运行 'tty' 命令,像这样:
$ tty
你会得到这样的东西:
/dev/ttys001
然后在 Node.js 中,如果你这样做了
const fd = fs.openSync('/dev/ttys001','a');
然后你会得到 tty 的文件描述符,并且 fd 应该是一个整数。
您可以使用该信息写入 tty,如下所示:
const fd = fs.openSync('/dev/ttys001','a');
const stream = fs.createWriteStream(null,fd:fd);
process.stdout.pipe(stream);
process.stderr.pipe(stream);
我花了一段时间才弄明白,所以也许它会对你有所帮助。
【讨论】:
以上是关于寻找有关如何使用 socket.io 或 IPC 传递文件描述符的示例的主要内容,如果未能解决你的问题,请参考以下文章
Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时