不知不觉已经使用python五年了,然而用来用去都是print, def, class等入门词,深感有必要往更深处学习,这才符合我老鸟的身份,哈哈!
一 python异步asyncio
下面是一个使用 Python asyncio 库的示例,该示例实现了一个简单的异步 TCP 回声服务器和客户端。这个服务器会接收客户端发送的数据,并将其原样返回(回声功能)。这个示例不仅展示了 asyncio 的基本用法,还涵盖了异步编程中常见的任务,如创建服务器、处理连接、发送和接收数据。
1.1 示例代码
1.1.1 服务器代码(echo_server.py)
import asyncio
async def handle_client(reader, writer):
# 读取客户端发送的数据
data = await reader.read(100) # 读取最多100个字节
# 将收到的数据发送回客户端(回声功能)
writer.write(data)
await writer.drain() # 确保数据被发送
# 关闭连接
writer.close()
async def main():
# 创建TCP服务器,监听本地12345端口
server = await asyncio.start_server(handle_client, '127.0.0.1', 12345)
# 服务器启动信息
print("Echo server started on 127.0.0.1:12345")
# 保持服务器运行,直到被取消
async with server:
await server.serve_forever()
# 运行服务器
asyncio.run(main())
1.1.2 客户端代码(echo_client.py)
import asyncio
async def main():
# 创建TCP客户端,连接到服务器的12345端口
reader, writer = await asyncio.open_connection('127.0.0.1', 12345)
# 发送数据到服务器
writer.write(b'Hello, server!')
await writer.drain() # 确保数据被发送
# 读取服务器返回的数据(回声)
data = await reader.read() # 读取直到连接关闭
print(f"Received echo: {data.decode()}")
# 关闭连接
writer.close()
# 运行客户端
asyncio.run(main())
1.1.3 说明
- 这个示例中的服务器是异步的,可以处理多个客户端连接而不会阻塞。
- 客户端也是异步的,它在发送数据后等待服务器的响应,而不会阻塞主线程。
- 运行服务器:在终端或命令提示符中,运行 echo_server.py 脚本。服务器将开始监听 127.0.0.1 上的 12345 端口
- 运行客户端:在另一个终端或命令提示符中,运行 echo_client.py 脚本。客户端将连接到服务器,发送字符串 "Hello, server!",并接收服务器的回声响应。
- 观察输出:客户端应该会打印出从服务器接收到的回声数据,即 "Received echo: Hello, server!"。
1404

被折叠的 条评论
为什么被折叠?



