本地机器与多个独立进程(1个服务器,n个客户端)的进程间通信



我希望有一个接受简单消息的服务器进程(最好是Python(和多个连接到服务器并向其发送消息的客户端(最好是Python(。服务器和客户端只能在同一台本地机器上运行,操作系统是基于Linux的。服务器将由操作系统自动启动,客户端稍后将独立于服务器启动。我强烈希望避免安装一个单独的消息传递框架/服务器来完成这项工作。消息将是简单的字符串,如"kick",甚至只是表示消息类型的单个字节。它还需要知道连接何时建立和丢失。

根据这些需求,我认为命名管道将是一个可行的解决方案,为每个客户端连接创建一个新的管道实例。然而,当我搜索示例时,我遇到的所有示例都处理从同一父进程派生而不是独立启动的进程,这意味着它们可以将父引用传递给子进程。

Windows似乎允许一个命名管道的多个实例(每个客户端连接一个(,但我不确定这在基于Linux的操作系统上是否可行?

请有人给我指一个正确的方向,最好是一个基本的例子,即使它只是伪代码。

我已经研究过Python中的多处理模块,但它似乎是围绕着服务器和客户端共享同一个进程或让其中一个生成另一个来进行的。

编辑可能很重要,主机设备不能保证具有联网功能(嵌入式设备(。

我以前用过zeromq做这类事情。它是一个相对轻量级的库,公开了这种功能

否则,您可以通过bind在服务器进程中创建一个套接字并将客户端connect连接到它来自己实现它。这对unix域套接字来说很好,只需在创建套接字时传递AF_UNIX即可,例如:

import socket
with socket.socket(socket.AF_UNIX) as s:
s.bind('/tmp/srv')
s.listen(1)
(c, addr) = s.accept()
with c:
c.send(b"hello world")

对于服务器,以及:

with socket.socket(socket.AF_UNIX) as c:
c.connect('/tmp/srv')
print(c.recv(8192))

为客户。

围绕这一点编写协议更为复杂,这就是像zmq这样的东西真正有帮助的地方,您可以轻松地围绕推送JSON消息

最新更新