Python-socketio:如何将一个客户端连接到多个服务器?

时间:2021-05-19 01:14:27

标签: python socket.io python-socketio

关于连接到具有多个客户端的一台服务器的信息和示例很多。但我想知道有没有办法让一个客户端同时连接到两台服务器?这是我的情况:

我有一个 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.pysecond_client.py

明白我要去哪里了吗?目标是从服务器一获取数据,处理它并将其发送到另一台服务器,理想情况下是一个客户端。如果我在这里遗漏了一些非常明显的东西,请原谅我。非常感谢任何帮助。

附言两台服务器都正常运行。

0 个答案:

没有答案