Twisted 框架简介
Twisted 框架简介
- Twisted 框架介绍
- 创建Twisted Reactor TCP 服务器
- 创建Twisted Reactor TCP 客户端
Twisted 框架介绍
Twisted 是一个完整的事件驱动的网络框架,利用它既能使用也能开发完整的异步网络应用程序和协议。
它现在还不是标准库的一部分,所以必须单独下载并安装它。使用pip install即可。
它提供了大量的支持来建立完整的系统,包括网络协议、线程、安全性和身份验证、聊天/ IM、 DBM 及RDBMS 数据库集成、 Web/因特网、电子邮件、命令行参数、 GUI 集成工具包等。
Twisted 提供了一个更加强大和灵活的框架,并且已经实现了很多协议。可以在
http://twistedmatrix.com 网站上找到更多关于 Twisted 的消息。
与 SocketServer 类似, Twisted 的大部分功能都存在于它的类中。
创建Twisted Reactor TCP 服务器
示例代码:
from twisted.internet import protocol, reactorfrom time import ctimePORT = 21567class TSServProtocol(protocol.Protocol):def connectionMade(self):clnt = self.clnt = self.transport.getPeer().hostprint('...connected from: {}'.format(clnt))def dataReceived(self, data):print('received from clinet: {}'.format(data.decode('utf-8')))data_formated = '[{}] {}'.format(ctime(), data.decode('utf-8'))self.transport.write(data_formated.encode('utf-8'))factory = protocol.Factory()
factory.protocol = TSServProtocolprint('waiting for connection...')
reactor.listenTCP(PORT, factory)
reactor.run()
获得protocol类并为时间戳服务器调用TSServProtocol。然后重写了connectionMade()和dataReceived()方法,当一个客户端连接到服务器时就会执行connectionMade()方法,而当服务器收到客户端通过网络发送的一些数据时,就会调用dataReceived()方法。reactor会作为该方法的一个参数在数据中传输,这样就能在无需自己提取它的情况下访问它。
此外, 传输实例对象解决了如何与客户端通信的问题。可以看到这个例子里如何在connectionMade()中使用它来获取主机信息,这些是关于与我们进行连接的客户端的信息,以及如何在dataReceived()中将数据返回给客户端。
在服务器代码的最后一部分,创建了一个协议工厂。之所以被称为工厂,是因为每次得到一个接入连接时,都能“制造”协议的一个实例。然后在ractor中安装一个TCP监听器,以此检查服务请求。当它接收到一个请求时,就会创建一个TSServProtocol实例来处理那个客户端的事务。
创建Twisted Reactor TCP 客户端
示例代码:
from twisted.internet import protocol, reactorHOST = 'localhost'
PORT = 21567class TSClntProtocol(protocol.Protocol):def sendData(self):data = input('> ')if data:print('sending {}'.format(data))self.transport.write(data.encode('utf-8'))else:self.transport.loseConnection()def connectionMade(self):self.sendData()def dataReceived(self, data):print(data.decode('utf-8'))self.sendData()class TSClntFactory(protocol.ClientFactory):protocol = TSClntProtocolclientConnectionLost = clientConnectionFailed = lambda self, connector, reason: reactor.stop()reactor.connectTCP(HOST, PORT, TSClntFactory())
reactor.run()
在客户端的代码中,也是通过重写connectionMade()和dataReceived()方法来扩展Protocol,并且这两者都会以与服务器相同的原因来执行。另外,还添加了自己的方法sendData(), 当需要发送数据时就会调用它。
因为是客户端,所以是开启与服务器对话的一端。一旦建立了连接,就进行第一步,即发送一条消息。服务器回复之后,我们将接受到的消息显示在屏幕上,并向服务器发送另一个消息。
以上行为会在一个循环中继续,直到当提示输入时我们不输入任何内容来关闭连接。此时,并非调用传输对象的write()方法发送另一个消息到服务器,而是执行loseConnection()来关闭套接字。当发生这种情况时,将调用工厂的 clientConnectionLost() 方法以及停止ractor,结束脚本执行。此外,如果因为某些其他的原因而导致系统调用了clientConnectionFailed(), 也会停止ractor.
在脚本最后创建了一个客户端工厂,创建一个到服务器的连接并运行ractor. 注意,这里实例化了客户端工厂,而不是将其传给reactor。这是因为我们不是服务器,需要等待客户端的连接,且服务器的工厂需要为每一次的连接都创建一个新的协议对象。我们这里是一个客户端,所以创建单个连接到服务器的协议对象。
Twisted 框架简介相关推荐
- 爬虫基础(五)-----scrapy框架简介
---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- 《HiWind企业快速开发框架实战》(0)目录及框架简介
<HiWind企业快速开发框架实战>(0)目录及框架简介 本系列主要介绍一款企业管理系统快速开发框架,该框架旨在快速完成企业管理系统,并实现易维护可移植的目标. 使用逐个系统模块进行编码的 ...
- WPF Interaction框架简介(一)——Behavior
原文:WPF Interaction框架简介(一)--Behavior 在WPF 4.0中,引入了一个比较实用的库--Interactions,这个库主要是通过附加属性来对UI控件注入一些新的功能,除 ...
- go语言学习(二)——Gin 框架简介
GoWeb开发有很多框架,如Beego.Gin.Revel.Echo.IRis等,学习框架可以快速做开发,对比常见goweb框架,通过其github的活跃度,维护的team,生产环境中的使用率以及师兄 ...
- Java开源——常见J2EE框架简介
Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...
- 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )
文章目录 一.EventBus 事件总线框架简介 二.EventBus 使用流程 一.EventBus 事件总线框架简介 Android 中的事件传递机制 : 使用 Intent 在组件间传递信息 ; ...
- 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )
文章目录 一. 热修复框架简介 1.类替换 2.so 替换 3.资源替换 4.全平台支持 5.生效时间 6.性能损耗 7.总结 二. 将 Java 字节码文件打包到 Dex 文件 一. 热修复框架简介 ...
- PHP微信开发框架LaneWeChat框架简介
框架名称:LaneWeChat 微信PHP开发框架 框架版本:1.4 框架简介:这是一个为快速开发微信应用而生的PHP框架.将微信的开发者功能根据文档进行了封装.为了快速开发的目的,开发者完全不需要要 ...
最新文章
- 具有absolute、relative、fixed的div设置宽度和高度的效果
- jmeter定时器的使用_jmeter压测学习30定时器之固定定时器(sleep等待时间)
- 《数据分析变革:大数据时代精准决策之道》一第1章 了解运营型分析
- gentoo.tw的临时解决方法[转贴]
- 【英语学习】【Daily English】U03 Leisure Time L03 Hiking and camping are some of his favorites.
- 疑似华为P30系列售价曝光:欧洲售价最高8400元
- linux 安装 中文输入法,[linux]安装中文输入法
- 人脸生成识别 Towards Pose Invariant Face Recognition in the Wild
- 我的天哪我有博客了!
- 工程项目进度表excel模板_救命,每天都要做工作报告!Excel一键生成精美报告的技巧,必学!...
- DevExpress Dashboard for .NET简化商业智能开发
- ppt插入html(用office而不是wps)
- 自定义elementUI select下拉框样式
- FatSecret Platform API
- Siebel系统中配置LDAP认证
- Win32从入门到放弃
- 原生JS判断两个元素是否为兄弟节点
- IPD中的DCP评审
- 用vue写一个npm包(package),发布及引用
- CSS高手布局:让footer完美处于网页下方