【发布时间】:2019-10-20 18:03:09
【问题描述】:
我的服务已经使用 Websockets 与网络服务器通信 它还连接到另一个 tcp 端点。
它做了两件事
1/ => 从网络服务器读取数据 => 将其写入 tcp 端点
2/ => 从 tcp 端点读取数据 => 将其写入网络服务器。
我有以下代码来达到目的
import websocket
import asyncio
def open_remote(reader):
print("open remote")
do_remote_read(reader)
def on_message(ws, message):
print("message recieved")
print(message)
writer.write(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("### closed ###")
async def do_remote_read(reader):
print("remote read")
data = await reader.read(1000)
ws.send(data)
print(data.decode())
print ("remote exit")
def on_open(ws):
print("websocket opened")
loop = asyncio.get_event_loop();
reader, writer = asyncio.open_connection('127.0.0.1', 2000,
loop=loop)
asyncio.sleep(3)
loop.run_until_complete(open_remote(reader))
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://x.x.x.x:/abc",
on_message = on_message,
on_error = on_error,
on_close = on_close)
ws.on_open = on_open
ws.run_forever()
在此代码中,一旦打开 websocket,就会调用回调 on_open 它尝试打开其他远程端点并得到以下错误。
websocket opened
error from callback <function on_open at 0x7f398e3d96a8>: yield from wasn't used with future
File "/usr/local/lib/python3.6/dist-packages/websocket/_app.py", line 345, in _callback
callback(self, *args)
File "websocket_python.py", line 40, in on_open
loop=loop)
File "/usr/lib/python3.6/asyncio/streams.py", line 81, in open_connection
lambda: protocol, host, port, **kwds)
File "/usr/lib/python3.6/asyncio/base_events.py", line 748, in create_connection
yield from tasks.wait(fs, loop=self)
File "/usr/lib/python3.6/asyncio/tasks.py", line 313, in wait
return (yield from _wait(fs, timeout, return_when, loop))
File "/usr/lib/python3.6/asyncio/tasks.py", line 396, in _wait
yield from waiter
【问题讨论】:
标签: websocket python-3.6 python-asyncio