-1

我正在使用这些文档来了解websocketsPython。

当发生在这些方法“内部”的所有事情时async,它可以正常工作,但是我如何在这些方法之外发送消息呢?在我的具体示例中,我button_pressed从 Raspberry PI 上的 GPIO 引脚获取一个事件,并且我想向所有连接的用户发送一条消息,说明该按钮被按下:

import asyncio
import websockets
import gpiozero

USERS = set()

def button_pressed():
    print("Doorbell rang!")
    if USERS:
        for user in USERS:
            print(f"Sending ring to {user}")
            asyncio.wait(user.send("ring"))

button = gpiozero.Button(3)
button.when_pressed = button_pressed

def register(ws):
    USERS.add(ws)

def unregister(ws):
    USERS.remove(ws)

async def doorbellsocket(websocket, path):
    register(websocket)

    try:
        async for message in websocket:
            print(f"Received message: {message}. Ignored.")
    finally:
        unregister(websocket)
    
print(f"Starting doorbellserv on {settings.host}:{settings.port}")
start_server = websockets.serve(doorbellsocket, settings.host, settings.port)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

代码运行,按钮按下事件被触发,Python 说它发送了一些东西,但没有任何东西到达我的客户端,就像这样简单:

function connectToServ() {
    var socket = new WebSocket(url);
    console.log("Connected to "+socket)
    socket.onmessage = function(event) {
        console.log(event.data);
    }; 
}
4

1 回答 1

-1

我必须这样做asyncio.run

def button_pressed():
    print("Doorbell rang!")

    if USERS:
        for user in USERS:
            print(f"Sending ring to {user}")
            asyncio.run(user.send("ring"))
于 2020-11-07T15:43:34.213 回答