我正在设置一个python websocket客户端,该客户端应按照以下说明发送和接收请求:
到目前为止,我已经完美地创建了用于读取/保存配置文件中的字符串的功能,将接收到的时间与当前时间进行了比较。
我无法弄清楚如何解决它的唯一问题是与服务器的通信,实际上我想定义一个函数来完成所有通信。
在没有异步的情况下尝试定义函数,我无法返回收到的消息。 在使用asyncio时,我无法在函数中传递参数(实际上是消息字符串!)
import asyncio
import websockets
async def connect(msg):
async with websockets.connect("ws://connect.websocket.in /xnode?room_id=19210") as socket: # the opencfg function reads a file, in this case, line 4 of config file where url is stored
await socket.send(msg)
result =await socket.recv()
return result
asyncio.get_event_loop().run_until_complete(connect())
def connect2(msg):
soc= websockets.connect("ws://connect.websocket.in /xnode?room_id=19210")
soc.send(msg)
result=soc.recv()
return result
print(connect2("gettime"))
如果您尝试发送“ gettime”,则将收到当前时间戳,在发送“ | online”之后,您应收到一个等于当前时间戳+ 10的值。
您拥有websocketurl,因此请自己尝试。
答案 0 :(得分:0)
我将您的代码更改为使用asynio.gather
来获取返回值,并将"gettime"
传递给函数:
import asyncio
import websockets
address = "ws://connect.websocket.in/xnode?room_id=19210"
async def connect(msg):
async with websockets.connect(address) as socket:
await socket.send(msg)
result = await socket.recv()
return result
result = asyncio.get_event_loop().run_until_complete(asyncio.gather(connect("gettime")))
print(result)
输出
['1564626191']
您可以通过将其放入函数定义中来重复使用代码:
def get_command(command):
loop = asyncio.get_event_loop()
result = loop.run_until_complete(asyncio.gather(connect(command)))
return result
result = get_command("gettime")
print(result)