正如@greencoptoguy所指出的,您可能希望使用管道,但是如果设置为使用Unix套接字,这里有一个使用StreamRequestHandler的粗略示例:
服务器:
#!/usr/bin/env python3
from socketserver import UnixStreamServer, StreamRequestHandler, ThreadingMixIn
import os
os.unlink("/tmp/test")
class Handler(StreamRequestHandler):
def handle(self):
while True:
msg = self.rfile.readline().strip()
if msg:
print("Data Recieved from client is: {}".format(msg))
else:
return
class ThreadedUnixStreamServer(ThreadingMixIn, UnixStreamServer):
pass
with ThreadedUnixStreamServer('/tmp/test', Handler) as server:
server.serve_forever()
客户:
#!/usr/bin/env python3
import socket
import sys
import time
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
client.connect("/tmp/test")
while True:
client.send(b"Client 1: hi\n")
time.sleep(1)
client.close()
ThreadingMixIn不是必需的,但它允许您运行两个客户机,并同时接收来自这两个客户机的消息。将客户机代码复制到“client1.py”和“client2.py”,并在client2.py中将“client1”更改为“client2”,同时运行这两个代码,以便在实践中看到这一点。
我不是专家,但听起来虽然管道更有效,但它们的缺点是只有一个程序链接到另一个程序。如果您有多个客户机,并且只有一个服务器,那么Unix套接字(如本文所示)可能是您的最佳选择。