Websocket服务器维护NAT后的两个设备之间的通信

问题描述

我想从位于NAT之后的PC上的Web浏览器向也位于NAT之后的RaspBerry Pi发送消息,反之亦然。两台设备都可以看到具有公共IP的服务器。我试图用python websockets编写以下内容

import asyncio
import websockets
import os
import logging

websocketPi = []
websocketHTML = []

async def receivePi(websocket,path):
    global websocketPi
    if websocket not in websocketPi:
        print(websocket)
        websocketPi.append(websocket)
    data = await websocket.recv()
    print(f"Received PI: {data}")
    for wsHTML in websocketHTML:
        try:
            await wsHTML.send(data)
        except:
            websocketHTML.remove(wsHTML)


async def receiveHTML(websocket,path):
    global websocketHTML
    if websocket not in websocketHTML:
        print(websocket)
        websocketHTML.append(websocket)
    data = await websocket.recv()
    print(f"Received HTML: {data}")
    for wsPi in websocketPi:
        try:
            await wsPi.send(data)
        except:
            websocketPi.remove(wsPi)


serverHTML = websockets.serve(receiveHTML,"127.0.0.1",8765)
serverPi = websockets.serve(receivePi,7654)

asyncio.get_event_loop().run_until_complete(serverPi)
asyncio.get_event_loop().run_until_complete(serverHTML)
asyncio.get_event_loop().run_forever()

这部分起作用,有时消息不会传递到目标。我的问题是两个def中都有'''websocket'''对象。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)