我希望有一个服务器进程(最好是Python)接受简单的消息,并有多个客户端(同样最好是Python)连接到服务器并向其发送消息。服务器和客户端将只能在同一台本地计算机上运行,并且操作系统基于Linux。服务器将由操作系统自动启动,客户端随后将独立于服务器启动。我强烈希望避免安装整个单独的消息传递框架/服务器来执行此操作。消息将是简单的字符串,例如“踢”,甚至只是表示消息类型的单个字节。它还需要知道何时建立和丢失连接。
根据这些要求,我认为命名管道将是一个可行的解决方案,并为每个客户端连接创建该管道的新实例。但是,当我搜索示例时,遇到的所有示例都处理从同一父进程衍生而来的进程,而不是独立启动的,这意味着它们可以将父引用传递给子进程。
Windows似乎允许使用命名管道的多个实例(每个客户端连接一个实例),但是我不确定在基于Linux的操作系统上是否可以实现?
即使有人只是伪代码,也请有人指出正确的方向,最好举个基本的例子。
我已经看过Python中的多处理模块,但这似乎是围绕着服务器和客户端共享相同的进程,或者让一个产生另一个。
修改 可能很重要,不能保证主机设备具有联网功能(嵌入式设备)。
答案 0 :(得分:1)
我以前曾用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消息