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

标签 python linux pipe ipc

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

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

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

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

我研究过 Python 中的多处理模块,但这似乎是围绕服务器和客户端共享相同的进程或让一个进程产生另一个进程的。

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

最佳答案

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

否则,您可以通过在服务器进程中绑定(bind)套接字并让客户端连接来自己实现它。这对于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))

为客户。

围绕这个编写协议(protocol)更加复杂,这就是 zmq 之类的东西真正有用的地方,您可以轻松地推送 JSON 消息

关于python - 本地机与多个独立进程的进程间通信(1个服务器,n个客户端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53779904/

相关文章:

python - time.sleep 和 suspend(即待机和休眠)

python - 将数字列表附加到新列表python

python - Python 中的计数和分组

linux - 如何使用 empty 与 telnet 交互

python - 减少多列中的多个ID

用于分析文件的php脚本

linux - crontab bash 脚本未运行

c++ - SDL2 - 检查是否创建了 OpenGL 上下文

windows - 如何使用标准输入管道作为 gcc 的源输入?

c - C中的多管道bash风格