当我设置两个进程来监听同一个Berkeley 套接字时会发生什么?
消息是否路由到两者?两者都不?两者之一?如果是这样,如何?
具体来说,我可以gunicorn
用相同的路径启动两个进程,--bind unix:
并且没有出现明显的错误:
gunicorn --bind=unix:/path/to/some/socket
这似乎是一个非常简单的问题,尽管我无法在 SE 或其他地方找到明确的答案。
两个进程不能绑定(和监听)到同一个 unix socket。尝试绑定到已经存在的unix套接字的进程将得到一个EADDRINUSE
错误。
具体来说,我可以用相同的 --bind unix:/ 启动两个 gunicorn 进程并且没有出现明显的错误
很可能您的gunicorn
进程在绑定到它之前实际上正在删除套接字文件,因此它最终绑定到不同的unix 套接字。
请记住,unix 套接字的实际地址是device_id:inode
元组,而不是访问它的路径。如果删除 unix 套接字,绑定到相同路径的程序最终将创建不同的套接字文件,并具有不同的 inode。
注意:所有这些都适用于“普通”、文件系统驻留的 Unix 套接字。Linux 也有抽象的unix 套接字,其中套接字的名称是它的实际地址,并且不使用任何类型的文件系统对象。对于这些,您将无法将两个套接字绑定到同一个地址。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句