linux - 在 Linux 中使用 UNIX 命名管道而不是 TCP 套接字的好处?
问题描述
在我读到命名管道与套接字的任何地方,我都看到套接字可以做命名管道可以做的事情,等等。我猜管道可能会更快,因为它们更简单,但我没有在任何地方明确找到它。
在 Linux 中,使用命名管道而不是套接字有什么好处?
感谢您的帮助和时间。
编辑:我在这里找到了一些比较,但这些是 UNIX 套接字(又名 UNIX 域套接字),基于此,我知道它们是不同的生物。
因此,我澄清一下:我问的是 TCP 套接字与 Unix 命名管道的对比(因为 MS Windows 有另一个叫做“命名管道”的东西,但它们在功能上似乎更类似于 UNIX 域套接字)。
在这一点上,在我看来,UNIX 命名管道比 TCP 套接字更快,但我想知道一些技术细节,说明为什么会这样,以及其他潜在的好处。
解决方案
这可能是一个不完美的答案,但这就是我所知道的。
通过 TCP 套接字发送数据意味着传输需要通过您的网络系统,将获得源和目标 IP,最多分成 64K 数据包。打包在 TCP 和 IP 信封中,可能会通过防火墙规则。收件人还需要确认包裹,确保它们按顺序到达,并且需要进行协商,以防包裹丢失并需要重新发送。
在命名管道中发送数据或多或少就像写入文件描述符(如 STDOUT)并从 STDIN 读取。
通过网络堆栈(即使它只是本地主机)只是有更多的层次和复杂性。可以可靠地将消息发送到世界另一端的系统需要它,但简单的本地命名管道不需要。
推荐阅读
- python-3.x - 有什么方法可以处理错误是目录吗?
- postgresql - PostgreSQL 连接到 localhost,尽管在 application.yaml 中设置了其他地址
- python - cx_freeze 和 pythonnet clr 的问题
- regex - 在 VBA 中使用正则表达式是在使用 accdb 文件的每个应用程序中启用 MS VBScript 正则表达式 5.5 所必需的
- database - ORA-01841 在表之间传递数据而不转换日期。甲骨文 SQL
- flutter - 我正在开发一个博客应用程序,如何在 Flutter 的 TextFormField 中插入图像、音频、视频等媒体文件?
- c# - 使用 Ghostscript 将 PDF 转换为图像
- c++ - 如何正确使用“C++ 核心指南:C.146:在类层次导航不可避免的情况下使用 dynamic_cast”
- angular - 如何存储来自 Angular 的 HTTP 调用的授权令牌?
- angular - 条纹实现 - 错误 TS2339:“条纹”类型上不存在属性“元素”