python里使用协程和StreamReader、StreamWriter来创建echo服务端
来源:互联网 发布:外国人眼中的中国 知乎 编辑:程序博客网 时间:2024/06/08 06:48
Python游戏开发入门
http://edu.csdn.net/course/detail/5690
在这个程序里,与前面使用asyncio.Protocol协议不一样,使用底层的StreamReader、StreamWriter来创建。
首先导入asyncio和logging库,接着导入sys库。定义服务器的IP地址和端口,以便服务器创建监听的端口。
开始定义echo(reader, writer)协程函数,这个函数是当客户端有socket连接过来就会调用这个函数响应,每一个连接过来,就创建一个协程对应工作,所以每个连接是隔离的。
接着配置logging.basicConfig的日志输出。
使用asyncio.get_event_loop()来创建协程的事件循环,使用event_loop.run_forever()进入服务器无限循环。
start_server()创建了一个任务factory返回,接着使用run_until_complete函数运行任务。
这里run_until_complete(server.wait_closed())等所有任务关闭。
源码如下:
import asyncioimport loggingimport sysSERVER_ADDRESS = ('localhost', 10000)async def echo(reader, writer): address = writer.get_extra_info('peername') log = logging.getLogger('echo_{}_{}'.format(*address)) log.debug('connection accepted') while True: data = await reader.read(128) if data: log.debug('received {!r}'.format(data)) writer.write(data) await writer.drain() log.debug('sent {!r}'.format(data)) else: log.debug('closing') writer.close() returnlogging.basicConfig( level=logging.DEBUG, format='%(name)s: %(message)s', stream=sys.stderr,)log = logging.getLogger('main')event_loop = asyncio.get_event_loop()# event_loop.set_debug(True)# Create the server and let the loop finish the coroutine before# starting the real event loop.factory = asyncio.start_server(echo, *SERVER_ADDRESS)server = event_loop.run_until_complete(factory)log.debug('starting up on {} port {}'.format(*SERVER_ADDRESS))# Enter the event loop permanently to handle all connections.try: event_loop.run_forever()except KeyboardInterrupt: passfinally: log.debug('closing server') server.close() event_loop.run_until_complete(server.wait_closed()) log.debug('closing event loop') event_loop.close()
输出如下:
asyncio: Using selector: SelectSelector
main: starting up on localhost port 10000
echo_::1_51532: connection accepted
echo_::1_51532: received b'This is the message. It will be sent in parts.'
echo_::1_51532: sent b'This is the message. It will be sent in parts.'
echo_::1_51532: closing
Python游戏开发入门
http://edu.csdn.net/course/detail/5690
你也能动手修改C编译器
http://edu.csdn.net/course/detail/5582
纸牌游戏开发
http://edu.csdn.net/course/detail/5538
五子棋游戏开发
http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672
阅读全文
1 0
- python里使用协程和StreamReader、StreamWriter来创建echo服务端
- python里使用协程和StreamReader、StreamWriter来创建echo客户端
- StreamWriter和StreamReader的使用
- StreamReader和StreamWriter 的使用
- StreamReader和StreamWriter
- StreamReader和StreamWriter类
- StreamReader和StreamWriter类
- FileStream 和 StreamWriter/StreamReader
- StreamReader和StreamWriter
- StreamReader和StreamWriter用法
- StreamReader和StreamWriter(字符)
- C#StreamReader和StreamWriter
- StreamReader和StreamWriter
- C# StreamWriter和StreamReader
- python里使用协程来创建echo服务器
- python里使用协程来创建echo客户端
- 使用StreamReader和StreamWriter读取和写入文本文件
- 黑马程序员------StreamReader和StreamWriter
- Spark--性能优化之shuffle调优
- java反射机制
- StarSpace是用于高效学习实体向量的通用神经模型
- GitHub初探
- 大数据学习[01]:zookeeper环境配置
- python里使用协程和StreamReader、StreamWriter来创建echo服务端
- 《Raspberry Pi Cookbook》pdf
- 前端解决跨域问题的8种方案
- vs 无法添加引用
- farbci1.0
- 第三周项目二—建设“顺序表”算法库
- 第三周项目4顺序表的应用
- Java 集合类分析
- Git命令自定义别名配置