使用 Clients and Servers

在上面的例子中,telnet是一个客户端。asyncio模块提供了一个协程方便你很容易的使用stream reader 和 writer来编写服务端和客户端。下面的代码演示了一个简单的echo server,该server监听localhost上的2222端口。你可以在Python的控制台中运行下面的代码,之后在另一个Python的控制台中运行客户端的代码作为客户端。

import asyncio

@asyncio.coroutine

def simple_echo_server():

# Start a socket server, call back for each client connected.

# The client_connected_handler coroutine will be automatically converted to a Task

yield from asyncio.start_server(client_connected_handler, 'localhost', 2222)

@asyncio.coroutine

def client_connected_handler(client_reader, client_writer):

# Runs for each client connected

# client_reader is a StreamReader object

# client_writer is a StreamWriter object

print("Connection received!")

while True:

data = yield from client_reader.read(8192)

if not data:

break

print(data)

client_writer.write(data)

loop = asyncio.get_event_loop()

loop.run_until_complete(simple_echo_server())

try:

loop.run_forever()

finally:

loop.close()

下面的代码演示了一个客户端程序连接了localhost上的2222端口,并且使用asyncio.StreamWriter对象写了几行数据,之后使用asyncio.StreamWriter对象读取服务端返回的数据。

import asyncio

LASTLINE = b'Last line.\n'

@asyncio.coroutine

def simple_echo_client():

# Open a connection and write a few lines by using the StreamWriter object

reader, writer = yield from asyncio.open_connection('localhost', 2222)

# reader is a StreamReader object

# writer is a StreamWriter object

writer.write(b'First line.\n')

writer.write(b'Second line.\n')

writer.write(b'Third line.\n')

writer.write(LASTLINE)

# Now, read a few lines by using the StreamReader object

print("Lines received")

while True:

line = yield from reader.readline()

print(line)

if line == LASTLINE or not line:

break

writer.close()

loop = asyncio.get_event_loop()

loop.run_until_complete(simple_echo_client())

python asyncio tcp server_Python 3.4 中新的 asyncio : Servers、Protocols 和 Transports相关推荐

  1. python asyncio tcp server_Python 的异步 IO:Asyncio 之 TCP Client

    关于 Asyncio 的其他文章: 如果不知道 Asyncio 是什么,先看「Asyncio 简介」那一篇. 一个简单的 HTTP Server 首先,为了便于测试,我们用 Python 内建的 ht ...

  2. python asyncio tcp server_asyncio异步IO——Streams详解

    前言 本文翻译自python3.7官方文档--asyncio-stream,译者马鸣谦,邮箱 1612557569@qq.com.转载请注明出处. 数据流(Streams) 数据流(Streams)是 ...

  3. python比较重要的模块_python中重要的模块--asyncio 转载

    转载自: https://www.cnblogs.com/zhaof/p/8490045.html 一直对asyncio这个库比较感兴趣,毕竟这是官网也非常推荐的一个实现高并发的一个模块,python ...

  4. python asyncio教程_在Python3中使用asyncio库进行快速数据抓取的教程

    web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...

  5. python tcp服务器 多线程_Python中的多线程TCP服务器

    我使用python的threding模块创建了一个简单的多线程tcp服务器.每次连接新客户端时,该服务器都会创建一个新线程. #!/usr/bin/env python import socket, ...

  6. Python 中如何解决 asyncio 文件描述符最大数量限制问题

    文章目录 问题复现 问题分析 事件循环 EventLoop I/O 多路复用 select 的缺点 解决方法 1.更换事件循环选择器 2.限制并发量 3.修改最大文件描述符限制 Windows Lin ...

  7. python能调用身份证读卡器吗_用Python在Linux下调用新中新DKQ-A16D读卡器,读二代证数据...

    1.背景 最近在研究二代证读卡器,手头上的设备是新中新DKQ-A16D,在官网(https://www.onecardok.com.cn/download)逛了一圈,发现Win下的示例,浏览器插件很多 ...

  8. (6)Python爬虫——爬取中新网新闻

    工欲善其事,必先利其器.我们要进行数据挖掘,就必须先获取数据,获取数据的方法有很多种,其中一种就是爬虫.下面我们利用Python2.7,写一个爬虫,专门爬取中新网http://www.chinanew ...

  9. Python 3.8 稳定版正式发布,新特性全面解读

    早在之前关于 Python 新版本的文档在官方一就直处于更新模式中,就在昨日 Python 3.8 稳定版正式发布了,让我们来看看新版本有哪些新特性呢? Python 3.8.0 稳定版的新特性 1P ...

最新文章

  1. 「完结」12篇文章带你逛遍主流分割网络
  2. day06_方法_20150806
  3. 判断丑数python_LintCode Python 简单级题目 517.丑数
  4. fastapi jinja2_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架
  5. Educational Codeforces Round 73 (Rated for Div. 2) F. Choose a Square 线段树 + 二维转一维
  6. access设置0字段为null是因为类型转换失败_Apache Pulsar 2.6.1 版本正式发布:2.6.0 加强版,新增 OAuth2 支持
  7. 实测java 与php运行速度比较
  8. Titanic(泰坦尼克号生存预测)---(1)
  9. js 正则判断用户是否输入表情
  10. python两行数据相加_小白python入门基础——Python安装教程与特色介绍
  11. html5中切换图片怎么做,HTML5编程实战之二:用动画的形式切换图片
  12. 如何在ant脚本中获得svn版本号
  13. 简单工厂模式--计算器代码及UML图
  14. 大道至简:智能语义检测的武林
  15. mysql 视图 多个 select_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...
  16. c++做的免费游戏狼人杀
  17. open erp java_OpenERP API 接口
  18. 数字后端——信号完整性分析
  19. 解决 Windows USB 鼠标键盘断连掉线的问题 和 安全删除硬件并弹出媒体图标 没有弹出移动硬盘的选项
  20. 小程序云函数new Date()获取的时间和new Date().getDay()获取的时间不一致 / 云函数存入的时间不对 /小程序云开发配置时区

热门文章

  1. 岛国科普第2弹-再造人类生命的神奇细胞Human.Life.Our.Amazing.Cell
  2. R语言ggplot2可视化并添加特定区间的回归线、R原生plot函数可视化并添加特定区间的回归线:Add Regression Line Between Certain Limits
  3. R语言使用caret包对GBM模型自定义参数调优:自定义优化参数网格、可视化核心参数与评估指标关系、Accuracy与树的深度、个数的关系、Kappa与树的深度、个数的关系
  4. R语言ggplot2可视化在可视化图像中添加上限线条、下限线条、添加上下限图例实战
  5. python使用textwrap包在已经生成的长字符串中嵌入回车符实战
  6. R语言nrow函数获取dataframe或者matrix行计数统计
  7. R语言jitter函数为数据添加噪声(noise)扰动信息实战
  8. R语言基于模拟退火(Simulated Annealing)进行特征筛选(feature selection)
  9. Python进行时间序列平稳检验ADFtest(Augmented Dickey-Fuller Unit Root Test)
  10. 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.