@@ -56,6 +56,17 @@ async def echo_client_streams(reader, writer):
5656 writer .close ()
5757
5858
59+ class EchoProtocol (asyncio .Protocol ):
60+ def connection_made (self , transport ):
61+ self .transport = transport
62+
63+ def connection_lost (self , exc ):
64+ self .transport = None
65+
66+ def data_received (self , data ):
67+ self .transport .write (data )
68+
69+
5970async def print_debug (loop ):
6071 while True :
6172 print (chr (27 ) + "[2J" ) # clear screen
@@ -67,6 +78,7 @@ async def print_debug(loop):
6778 parser = argparse .ArgumentParser ()
6879 parser .add_argument ('--uvloop' , default = False , action = 'store_true' )
6980 parser .add_argument ('--streams' , default = False , action = 'store_true' )
81+ parser .add_argument ('--proto' , default = False , action = 'store_true' )
7082 parser .add_argument ('--addr' , default = '127.0.0.1:25000' , type = str )
7183 parser .add_argument ('--print' , default = False , action = 'store_true' )
7284 args = parser .parse_args ()
@@ -100,6 +112,10 @@ async def print_debug(loop):
100112 print ('serving on: {}' .format (addr ))
101113
102114 if args .streams :
115+ if args .proto :
116+ print ('cannot use --stream and --proto simultaneously' )
117+ exit (1 )
118+
103119 print ('using asyncio/streams' )
104120 if unix :
105121 coro = asyncio .start_unix_server (echo_client_streams ,
@@ -108,6 +124,17 @@ async def print_debug(loop):
108124 coro = asyncio .start_server (echo_client_streams ,
109125 * addr , loop = loop )
110126 srv = loop .run_until_complete (coro )
127+ elif args .proto :
128+ if args .streams :
129+ print ('cannot use --stream and --proto simultaneously' )
130+ exit (1 )
131+
132+ print ('using simple protocol' )
133+ if unix :
134+ coro = loop .create_unix_server (EchoProtocol , addr )
135+ else :
136+ coro = loop .create_server (EchoProtocol , * addr )
137+ srv = loop .run_until_complete (coro )
111138 else :
112139 print ('using sock_recv/sock_sendall' )
113140 loop .create_task (echo_server (loop , addr , unix ))
0 commit comments