【发布时间】:2016-09-14 15:29:08
【问题描述】:
我在看UDP echo server的例子:
import asyncio
class EchoServerProtocol:
def connection_made(self, transport):
self.transport = transport
def datagram_received(self, data, addr):
message = data.decode()
print('Received %r from %s' % (message, addr))
print('Send %r to %s' % (message, addr))
self.transport.sendto(data, addr)
loop = asyncio.get_event_loop()
print("Starting UDP server")
# One protocol instance will be created to serve all client requests
listen = loop.create_datagram_endpoint(
EchoServerProtocol, local_addr=('127.0.0.1', 9999))
transport, protocol = loop.run_until_complete(listen)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
transport.close()
loop.close()
看来是来电了……
loop.create_datagram_endpoint(EchoServerProtocol, local_addr=('127.0.0.1', 9999))
...正在这里完成所有工作。 method documentation 为第一个参数 (protocol_factory) 声明以下内容:
protocol_factory 必须是返回协议实例的可调用对象。
我的问题:
- 什么定义了
protocol instance? -
returning a protocol instance是initiating a protocol object的不同写法吗? - 示例中的
EchoServerProtocol如何满足此要求?
【问题讨论】:
标签: python python-3.5 python-asyncio