twisted 使用】的更多相关文章

HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是其他东西.HTTP服务器,也就是Web服务器,目前已经有很多成熟的产品,例如Apache HTTP Server.Tomcat.Nginx.IIS等. 本文的内容不是讲解如何使用以上的HTTP服务器,而是要分别用MINA.Netty.Twisted实现一个简单的HTTP服务器. 首先,要简单了解一下…
学习了socket后决定尝试使用框架,目标锁定了Twisted. 什么是Twisted? twisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/Jabber. 非常好的一点是twisted实现和很多应用层的协议,开发人员可以直接只用这些协议的实现.其实要修改Twisted的SSH服务器端实现非常简单.很多时候,开发人员需要实现protocol类. 一个Twisted程序由re…
由于我安装Python64位的,下载后没注册,安装Twisted时老提示“python version 2.7 required,which was not found in the registry”错误 解决方法 1.任意位置存放reg.py文件 # # script to register Python 2.0 or later for use with win32all # and other extensions that require Python registry setting…
原文地址:http://zhouzhk.iteye.com/blog/765884 python的twisted框架中带了一个web server: twisted web.现在看看怎么用. 一)准备工作 1)到 ActiveState网站下载ActivePython2.6.xxx,我用的windows版本,然后双击安装.选择ActivePython因为python网站上下载不了2.6.6了,奇怪;另外不用找easy_install这个python的包管理工具了. 2)安装相关包.打开一个命令行…
Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如网络协议,线程,数据库管理,网络操作,电子邮件等 事件驱动 一,注册事件 二,触发事件 自定义事件框架  event_fram.py #!/usr/bin/env python # -*- coding: utf-8 -*- event_list = [] # 定义一个事件驱动列表,只有注册了该事件列表的对象都会被该事件方法处理 def run(): for event in event_list: obj = event() ob…
要想开发一个高性能的TCP服务器,熟悉所使用框架的线程模型非常重要.MINA.Netty.Twisted本身都是高性能的网络框架,如果再搭配上高效率的代码,才能实现一个高大上的服务器.但是如果不了解它们的线程模型,就很难写出高性能的代码.框架本身效率再高,程序写的太差,那么服务器整体的性能也不会太高.就像一个电脑,CPU再好,内存小硬盘慢散热差,整体的性能也不会太高. 玩过Android开发的同学会知道,在Android应用中有一个非常重要线程:UI线程(即主线程).UI线程是负责一个Andro…
用过JavaScript或者jQuery的同学都知道,JavaScript特别是jQuery中存在大量的回调函数,例如Ajax.jQuery的动画等. $.get(url, function() { doSomething1(); // (3) }); // (1) doSomething2(); // (2) 上面的代码是jQuery的Ajax,由于Ajax是异步的,所以在请求URL的过程中并不会阻塞程序,也就是程序运行到(1)并不用等待Ajax请求的结果,就继续往下执行(2).而$.get的…
消息传递有很多种方式,请求/响应(Request/Reply)是最常用的.在前面的博文的例子中,很多都是采用请求/响应的方式,当服务器接收到消息后,会立即write回写一条消息到客户端.HTTP协议也是基于请求/响应的方式. 但是请求/响应并不能满足所有的消息传递的需求,有些需求可能需要服务端主动推送消息到客户端,而不是被动的等待请求后再给出响应. 发布/订阅(Publish/Subscribe)是一种服务器主动发送消息到客户端的消息传递方式.订阅者Subscriber连接到服务器客户端后,相当…
开发过Web应用的同学应该都会使用session.由于HTTP协议本身是无状态的,所以一个客户端多次访问这个web应用的多个页面,服务器无法判断多次访问的客户端是否是同一个客户端.有了session就可以设置一些和客户端相关的属性,用于保持这种连接状态.例如用户登录系统后,设置session标记这个客户端已登录,那么访问别的页面时就不用再次登录了. 不过本文的内容不是Web应用的session,而是TCP连接的session,实际上二者还是有很大区别的.Web应用的session实现方式并不是基…
protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化.反序列化),一般应用于网络传输,可支持多种编程语言. protobuf如何使用这里不再介绍,本文主要介绍在MINA.Netty.Twisted中如何使用protobuf,不了解protobuf的同学可以去参考我的另一篇博文. 在前面的一篇博文中,有介绍到一种用一个固定为4字节的前缀Header来指定Body的字节数的一种消息分割方式,在这里同样要使用到.只是其中Body的内容不再是字符串,…
catalogue . Twisted理论基础 . 异步编程模式与Reactor . Twisted网络编程 . reactor进程管理编程 . Twisted并发连接 1. Twisted理论基础 0x1: 异步编程模型 事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理.另外两种常见的编程范式是(单线程)同步以及多线程编程 在这个模型中,任务是交错完成,值得注意的是: 这是在单线程的控制下.这要比多线程模型简…
Debian sudo apt-get install gcc python-dev && sudo pip install twisted CentOS sudo yum install gcc python-devel && sudo pip install twisted 备注: 当安装出现错误:command 'gcc' failed with exit status 1 需安装gcc与python-dev(或python-devel)…
pip 安装twisted库需要先安装依赖包,不然报"error: command 'gcc' failed with exit status 1" # yum install gcc python-devel# pip install twisted…
系统  Ubuntu14.04 python  2.7.11 运行  pip install scrapy  报错: No matching distribution found for Twisted>=10.0.0 (from scrapy) 需要手动安装Twisted, 从官网 https://twistedmatrix.com/trac/ 下载 Twisted-16.1.0.tar.bz2, 依次运行: tar -xjvf Twisted-16.1.0.tar.bz2cd Twisted…
select.poll和epoll的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作. select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一. select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Lin…
Twisted是用Python实现的基于事件驱动的网络引擎框架,功能非常丰富,基本包括了常用的网络组件. 所谓事件驱动,就是说程序就像是一个报警器(reactor),时刻等待着外部事件(event),诸如有人入侵等,一旦有事件发生,程序就会触发一些特定的操作(callback),注入拨打报警电话等. Reactor reactor是twisted框架中的核心,负责管理各种回调函数,接收各种系统事件,并根据规则对事件和回调函数进行匹配.派发处理.在Linux系统中,由于秉承“一切皆文件”的理念,系…
#coding=utf-8 from twisted.internet import reactor,protocol class QuickClient(protocol.Protocol): def connectionMade(self): print dir(self.transport.getPeer()) print "port:%s type:%s "%(self.transport.getPeer().port, self.transport.getPeer().typ…
事實上Deferred的確就像是一連串的動作,用callback的形式被串在一起,我們用deferred或許可以這樣寫 d.addCallback(洗菜)d.addCallback(切菜)d.addCallback(放到鍋中)d.addCallback(加鹽) 如果只是這樣看起來就像是單純的責任鍊,做完一件事情把結果往下丟,但是,如果發生例外呢? def 切菜(data): raise 切到手指('Ouch!') 如果只是單純的責任鍊,會從最初呼叫它的地方丟出來,如果只是一般的單thread程式…
在上一篇博文中,有介绍到用换行符分割消息的方法.但是这种方法有个小问题,如果消息中本身就包含换行符,那将会将这条消息分割成两条,结果就不对了. 本文介绍另外一种消息分割方式,即上一篇博文中讲的第2条:use a fixed length header that indicates the length of the body,用一个固定字节数的Header前缀来指定Body的字节数,以此来分割消息. 上面图中Header固定为4字节,Header中保存的是一个4字节(32位)的整数,例如12即为…
在前面的博文中,介绍一些消息分割的方案,以及MINA.Netty.Twisted针对这些方案提供的相关API.例如MINA的TextLineCodecFactory.PrefixedStringCodecFactory,Netty的LineBasedFrameDecoder.LengthFieldBasedFrameDecoder,Twisted的LineOnlyReceiver.Int32StringReceiver. 除了这些方案,还有很多其他方案,当然也可以自己定义.在这里,我们定制一个自…
在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次read.但是,现实不总是按照剧本来走. MINA官方文档节选: TCP guarantess delivery of all packets in the correct order. But there is no guarantee that one write operation on the s…
MINA.Netty.Twisted为什么放在一起学习?首先,不妨先分别看一下它们官方网站对其的介绍: MINA: Apache MINA is a network application framework which helps users develop high performance and high scalability network applications easily. It provides an abstract event-driven asynchronous AP…
Python Twisted介绍 作者:Jessica McKellar 原文链接 Twisted是用Python实现的基于事件驱动的网络引擎框架.Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库.Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可扩展性高.基于事件驱动.跨平台的网络开发框架,为此他们决定自己实现一个,并从那些之前的游戏和网络应用程序的开发者中学习,汲取他们的经验教…
概述 Unlike TCP, UDP has no notion of connections. A UDP socket can receive datagrams from any server on the network and send datagrams to any host on the network. In addition, datagrams may arrive in any order, never arrive at all, or be duplicated in…
简单的实现谷歌的代理: 架构就是下面这么简单. ================= my server outside GFW  |    <----------------------> your browser  visit my server at port 8080 ================= 代码如下: #coding=utf-8 from twisted.web import resource, server from twisted.internet import rea…
以下是python脚本send_mms.py #############################################!/usr/bin/python# -*- coding: utf-8 -*- from twisted.application import servicefrom twisted.internet import reactor def main(counter=0): print counter, '...' if counter == 10: reacto…
转载于:http://www.cnblogs.com/silverbullet11/p/4966608.html 常用网址: Python 3.5: https://www.python.org/downloads/ Wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 参考文章: https://www.webucator.com/blog/2015/03/how-to-install-lxml-for-python-3-on-64-b…
twisted是一个强大的异步网络框架,应用的面也非常广,但是没有这几年才出现的Node.js火,社区.文档也是很少可怜我觉得二者其实在本质上差不多,而且python使用起来还是比较容易一些的 匿名用户 因为,它给了一大部分程序猿幻觉比如前后端统一,脚本也能性能很屌,做Demo搜搜快什么的,但实际上,这仅仅是幻觉罢了…… 正是因为这样的幻觉是“看得到”的,又有一个响当当的干爹Google,因此Node的曝光率远高于后端常规语言就不足为奇了. 论速度,你一个带JIT的跟常规脚本语言的虚拟机比,没到…
原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架.Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库.Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常艰难,他们迫切地需要一个可扩展性高.基于事件驱动.跨平台的网络开发框架,为此他们决定自己实现一个,并从那些之前的游戏…
前言: 最近帮朋友review其模块服务代码, 使用的是python的twisted网络框架. 鉴于之前并没有使用过, 于是决定好好研究一番. twisted的reactor模型很好的处理了网络IO事件, 以及定时任务触发. 但包处理后的业务逻辑操作, 需要根据具体的场景来决定. 本文将讲述twisted如何实现half-sync/half-async的模式, 其线程池和defer模式是如何设计和使用的. 场景构造: twisted服务接受业务请求, 后端需要访问mysql. 由于mysql的接…