我有一个Connection
用于包含读取和写入asyncio
连接流的对象:
class Connection(object):
def __init__(self, stream_in, stream_out):
object.__init__(self)
self.__in = stream_in
self.__out = stream_out
def read(self, n_bytes : int = -1):
return self.__in.read(n_bytes)
def write(self, bytes_ : bytes):
self.__out.write(bytes_)
yield from self.__out.drain()
在服务器端,每次客户端连接时connected
创建一个对象,然后读取 4 个字节。Connection
@asyncio.coroutine
def new_conection(stream_in, stream_out):
conn = Connection(stream_in, stream_out)
data = yield from conn.read(4)
print(data)
在客户端,写出 4 个字节。
@asyncio.coroutine
def client(loop):
...
conn = Connection(stream_in, stream_out)
yield from conn.write(b'test')
这几乎可以按预期工作,但我必须yield from
每次都read
打电话write
。我试过yield from
从里面 ing Connection
:
def read(self, n_bytes : int = -1):
data = yield from self.__in.read(n_bytes)
return data
但我没有得到数据,而是得到一个输出
<generator object StreamReader.read at 0x1109983b8>
如果我从多个地方打电话read
,write
我不想yield from
每次都重复 s;而是将它们留在里面Connection
。我的最终目标是将我的功能缩减new_conection
为:
@asyncio.coroutine
def new_conection(stream_in, stream_out):
conn = Connection(stream_in, stream_out)
print(conn.read(4))