UNIX 域套接字的主要应用场景是什么?

2021-01-13 21:29:32 +08:00
 zhoudaiyu

比如有个 go 的进程(作为客户端)调用本机的一个 python 的进程(作为服务端)执行某个函数,是不是可以用 UNIX Domain Socket 进行通信?那么通常这种调用方式是使用什么方式完成调用呢?我想到了一个类似于 JsonRpc 的方式,即将客户端调用的方法名,参数等序列化为一个 json 字节流,服务端反序列化,然后执行相应的方法,再将结果返回给客户端。请问是否可行?

1603 次点击
所在节点    问与答
6 条回复
ysc3839
2021-01-13 22:03:16 +08:00
主要应用场景是跨进程通信
agagega
2021-01-13 23:04:40 +08:00
Nginx 和 PHP-FPM 就可以这么干
aheadlead
2021-01-13 23:07:57 +08:00
android 应用打 log 时,是通过 unix domain socket 写到 logd 进程里的。
MeteorCat
2021-01-13 23:14:32 +08:00
单机效率 /dev/shm 创建 server.sock,不走 lo 环流
ETiV
2021-01-14 02:07:38 +08:00
正文内容和标题在问的有出入,我回答下标题的内容吧

一、权限隔离
unix socket 因为建立在本地路径,所以可以配置 owner 、group 、other 的权限( chmod 0755 那些),来限制其他账户的访问。典型的就是 docker daemon,监听在了本地 socket 上,并且只给 docker 组访问,这样只有在 docker 用户组里的账号才有权限去调 docker API 。
所以也从来不要将 docker daemon 明文地监听在 TCP 端口上。

二、高并发的反向代理
TCP 访问某个端口,需要在本机高位端口随机开一个再建立连接,而端口号的个数是有限制的(即便可以复用)。反向代理到本机路径下的 unix socket 可以避免此类问题,只要将可打开的文件描述符开够即可。
msg7086
2021-01-14 02:25:05 +08:00
简单来解释就是一个效率更高、更安全的 TCP/UDP 端口。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744705

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX