关于连接到具有多个客户端的一台服务器的信息和示例很多。但我想知道有没有办法让一个客户端同时连接到两台服务器?这是我的情况:
我有一个 python 客户端,它从一台服务器获取数据,分析它并向另一台服务器发送适当的命令。关于这个问题的信息似乎较少,如果我可以称之为。
这是我尝试解决这个问题的方法。首先,我创建了一个 socketio.Client
类,它使我能够创建两个客户端实例。它没有没有工作。我在这里错过了什么?:
import socketio
class SocketClient(socketio.Client):
def __init__(self, server_ip):
self.server_ip = server_ip # server's ip address
self.sio = socketio.Client(logger=True)
def connect(self):
self.sio.connect(self.server_ip, namespaces=['/my_namespace'])
@self.sio.event
def connect_error(self, error):
print('connection error=> ', error)
@self.sio.event
def my_event(self, server_response):
# Here I have to take the server_response
# and send it to another server.
# How do I do it?
# self.sio.emit('some_event', server_response)
# that does not work, as I do not have the second client instance
pass
@self.sio.event
def my_other_event(self, server_response):
# process the response
pass
# initiate the two client instances:
if __name__ == '__main__':
first_client = SocketClient('http://192.168.100.103')
second_client = SocketClient('http://192.168.100.104')
first_client.connect()
second_client.connect()
在我第一次尝试失败后,我放弃了类实例方法,转而使用功能性方法:
import socketio
first_client = socketio.Client()
second_client = socketio.Client()
@second_client.event
@first_client.event
def connect():
print(f'connected with id {first_client.sid}')
@second_client.event
@first_client.event
def connect_error(e):
print('Error=> ', e)
@second_client.event
@first_client.event
def disconnect():
print('disconnected')
@first_client.event
def my_event(server_response):
# Here I have to take the server_response
# and send it to another server.
second_client.emit('some_event', server_response) # is it even possible?
@second_client.event
def my_other_event(server_response):
# handle the response
pass
if __name__ == '__main__':
first_client.connect('http://192.168.100.103')
second_client.connect('http://192.168.100.104')
在这两种情况下,我在技术上都在创建两个客户端。我不妨把它们做成单独的文件,比如 first_client.py
和 second_client.py
。
明白我要去哪里了吗?目标是从服务器一获取数据,处理它并将其发送到另一台服务器,理想情况下是一个客户端。如果我在这里遗漏了一些非常明显的东西,请原谅我。非常感谢任何帮助。
附言两台服务器都正常运行。