如何解决如何通过非异步方法发送网络套接字消息?
我正在使用these docs来从Python了解websockets
。
当所有在async
方法内部发生的事情都可以正常工作,但是我该如何发送消息呢?在我的特定示例中,我从RaspBerry PI的GPIO引脚上收到一个button_pressed
事件,我想向所有连接的用户发送该按钮被按下的消息:
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);
};
}
解决方法
我必须这样做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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。