何时以及为何使用 AF_UNIX,为什么使用同一台机器
When and why to use AF_UNIX, why work with the same machine
第一次开始研究Python中的socket
库,才知道有个常量叫AF_UNIX
与 AF_INET
做同样的事情,但速度更快,仅与同一台机器建立连接并使用系统文件而不是互联网连接
但我不明白的是为什么?为什么我要与自己的机器建立通信?那有什么用,在什么情况下使用 AF_UNIX?
真的有用
您的问题有很多答案,我将尝试回答一些 AF_UNIX
:
的用例
您可以使用它为其他进程公开专用通道,以便使用文件进行安全通信(因为它会遵守文件系统层次结构和 *nix 权限模型)。众所周知,PostgreSQL 公开了一个 unix 套接字,因为它的 psql
cli 可以安全连接。
您可以使用套接字协议实现可交换通信,因为它很容易在 AF_INET
和 AF_UNIX
之间移动并扩展它在不同主机(redis 和 docker 这样做)。
您可以为不同的进程和技术创建一种可扩展且快速的通信方式,而无需设备开销 AF_INET
,即使您使用的是环回接口。
可能性实际上是无限的,因为它包含了一些个人喜好。但 AF_UNIX
使用与 AF_INET
类似的规范这一事实使其成为扩展进程之间通信的强大工具,而不必依赖非常不同的工具(FIFO、共享内存、内部队列、文件,等等)一些)。
第一次开始研究Python中的socket
库,才知道有个常量叫AF_UNIX
与 AF_INET
做同样的事情,但速度更快,仅与同一台机器建立连接并使用系统文件而不是互联网连接
但我不明白的是为什么?为什么我要与自己的机器建立通信?那有什么用,在什么情况下使用 AF_UNIX?
真的有用您的问题有很多答案,我将尝试回答一些 AF_UNIX
:
您可以使用它为其他进程公开专用通道,以便使用文件进行安全通信(因为它会遵守文件系统层次结构和 *nix 权限模型)。众所周知,PostgreSQL 公开了一个 unix 套接字,因为它的
psql
cli 可以安全连接。您可以使用套接字协议实现可交换通信,因为它很容易在
AF_INET
和AF_UNIX
之间移动并扩展它在不同主机(redis 和 docker 这样做)。您可以为不同的进程和技术创建一种可扩展且快速的通信方式,而无需设备开销
AF_INET
,即使您使用的是环回接口。
可能性实际上是无限的,因为它包含了一些个人喜好。但 AF_UNIX
使用与 AF_INET
类似的规范这一事实使其成为扩展进程之间通信的强大工具,而不必依赖非常不同的工具(FIFO、共享内存、内部队列、文件,等等)一些)。