我可以用python同时连接到两个不同的websockets服务器吗?

2024-04-19 22:56:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用python同时连接到两个websockets服务器,因为我需要将从每个服务器接收的数据合并到一个文件中,然后对其进行处理。我在一个websockets提要中成功地使用了之类的东西,但不能同时在两个提要中使用:

from websocket import create_connection

ws_a = create_connection("wss://www.server1.com")
ws_a.send("<subscription message, server 1>")

ws_b = create_connection("wss://www.server2.com")
ws_b.send("<subscription message, server 2>")

while bln_running:
    response_a =  ws_a.recv()

    if "success" in response_a:
        ...do something...

    response_b =  ws_b.recv()
    if "success" in response_b:
        ...do something...

但是,在本例中,我只从服务器1接收事件。我不认为把它分成两个线程就行了,因为我有两组不同的数据,我需要合并它们。(尽管质疑这一说法是一种可能的替代解决方案??)你知道吗

任何关于同时获取两个feed的指导或建议。你知道吗

非常感谢。你知道吗

My python版本:3.6.2 | Anaconda custom(64位)|(默认值,2017年9月19日,08:03:39)[MSC v.1900 64位(AMD64)]


Tags: 数据服务器comsendmessagewswebsocketsserver
1条回答
网友
1楼 · 发布于 2024-04-19 22:56:33

这起作用了:

from websocket import create_connection
from threading import Lock, Thread

lock = Lock()
message_list = [] #global list

def collect_server1_data():
    global message_list
    bln_running = True
    ws_a = create_connection("wss://www.server1.com")
    ws_a.send("<subscription>")
    while bln_running:   
        response_a =  ws_a.recv()
        lock.acquire()
        message_list.append(response_a)
        lock.release()
        response_a = ""

def collect_server2_data(): 
    global message_list
    bln_running = True
    ws_b = create_connection("wss://www.server2.com")
    ws_b.send("<subscription>")
    while bln_running:   
        response_b =  ws_b.recv()
        lock.acquire()
        message_list.append(response_b)
        lock.release()
        response_b = ""


###     Main    
threads = []
for func in [collect_server1_data, collect_server2_data]:
    threads.append(Thread(target=func))
    threads[-1].start()

for thread in threads:
    thread.join() 

多亏了约翰,他才把车开到了正确的方向。你知道吗

相关问题 更多 >