我计划编写一个包装包websockets的类WebsocketHandler
代码如下:
import asyncio
import websockets
class WebsocketHandler:
__connection = None
def __init__(self):
asyncio.run(self.__setConnection())
async def __setConnection(self):
async with websockets.connect("ws://localhost/your/path") as websocket:
self.__connection = websocket
print("Connected")
def send(self, msg):
self.__connection.send(msg)
print("message Send")
ws = WebsocketHandler()
ws.send("message")
对于服务器部分,我有另一个完成的脚本,它可以在我有一个新的连接,当我收到一个消息,当我有一个客户端断开连接时,它会向我发送一个消息。在
当我尝试它时,脚本成功地连接到我的websocket服务器(scriptprintConnected
),在服务器端我得到了一个新的连接。在
我的脚本里有个警告
^{pr2}$然后我的脚本打印Message send
,它就停止了。在
问题是,在服务器端,我接收不到有消息的事实,只有一条消息告诉我客户端已断开连接。基本上,脚本不会发送消息,也不会产生错误。在
有人知道问题出在哪里吗?在
问题是
WebsocketHandler
类只有一个异步方法,即__setConnection
,它是通过调用asyncio.run
函数来运行的。那个docs的人这么说也就是说,这是唯一可以运行异步代码的地方。您的代码创建一个websocket连接,并在打印“Connected”后立即关闭它。发生这种情况是因为您使用
async with
调用websockets.connect
方法作为异步上下文管理器,在退出时自动关闭连接。这是第一个缺陷,第二个缺陷是self.__connection.send
函数是一个协程,它不会运行,直到您等待为止。这正是错误消息告诉您的。以下是如何修复websocket处理程序类:相关问题 更多 >
编程相关推荐