寻找有关如何使用 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。如何设置套接字保持活动/超时

react native 和 java 之间的 Socket.io

如何使用 socket.io 实现长轮询?

如何使用 nestjs 和 socket.io 创建房间

如何实现socket.io的生存时间

回退如何与 socket.io 一起工作?