问题描述
是否可以在 Python3 中创建一个可以有多个唯一实例的 TCP Socket 处理程序类?
我有 2 个线程 TCP 套接字服务器,它们为连接的客户端提供唯一信息。我正在尝试使“节点 1”套接字服务器处理程序仅提供“节点 1”的数据,而“节点 2”套接字服务器处理程序将提供“节点 2”的数据。
我使用变量“node”制作了一个自定义处理程序。
class NodeTCPHandler(socketserver.BaseRequestHandler):
def __init__(self,request,client_address,server):
socketserver.BaseRequestHandler.__init__(self,server)
self.node = 6
return
def handle(self):
logging.debug("Node Socket has been started")
global stop,temperature,humidity,pressure,voltage
logging.debug("{} connected to Node 0{} Socket".format(self.client_address[0],self.node+1))
while not stop:
msg = (str(temperature[self.node])+','+str(humidity[self.node])+','+str(pressure[self.node])+','+str(voltage[self.node]))
self.request.sendall(msg.encode())
time.sleep(5)
我尝试在创建套接字服务器并定义处理程序后设置变量“节点”。
node_01_server = socketserver.TCPServer((hostAddr,nodePort[0]),NodeTCPHandler)
node_01_server.RequestHandlerClass.node = 0
node_02_server = socketserver.TCPServer((hostAddr,nodePort[1]),NodeTCPHandler)
node_02_server.RequestHandlerClass.node = 1
node_01_thread = threading.Thread(name='Node 01 Socket',target=node_01_server.serve_forever)
node_02_thread = threading.Thread(name='Node 02 Socket',target=node_02_server.serve_forever)
这接近工作,但是当我设置“node_02_server.RequestHandlerClass.node”时,它也会覆盖“node_01_server.RequestHandlerClass.node”节点变量!
我显然遗漏了一些东西,但我觉得我已经接近解决方案了。这是我第一次真正尝试使用类和套接字服务器,所以如果我犯了任何明显的错误,请告诉我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)