我是靠谱客的博主 安静心锁,最近开发中收集的这篇文章主要介绍Python的Twisted入门 Python的Twisted入门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Python的Twisted入门

Twisted基本模型

Twisted网络编程框架是一种基于事件的网络编程框架,用户需要继承特定的类,并重载其中的方法来处理网络通信中可能出现的各种情况。Twisted的网络通信模型最基本的也要由三部分组成:反应器(reactor)、协议(protocol)、工厂(factory)。其中反应器用来执行事件循环,分发事件处理等等,每个应用程序中一般只能启动一个reactor。协议用来完成与一个已经连接成功的主机的交互功能,主要有数据的接收和发送功能。连接的断开事件也可以在这里处理。工厂负责与一个协议的启动和关闭功能,而且还负责在连接成功时生成一个协议对象,(by gashero)用于与远程主机的交互功能。

一个典型的Twisted应用程序会建立至少一个协议,可以从twisted.internet.protocol.BaseProtocol类或其子类继承。协议还需要实现数据的接收处理,即收到数据之后需要做出何种响应。比较简单的Twisted应用程序可以继承一个空的工厂,来自twisted.internet.protocol.Factory或其子类。工厂至少应该指定protocol属性,指向协议类。最后就是要启动事件循环,根据连接方向的不同,可以选择用reactor的connectXXX()或listenXXX()方法,然后执行reactor.run()启动事件循环。

简单入门:

服务端:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/27 20:33
# @File    : ser1.py
"""
twisted 服务端
"""

from twisted .internet import protocol,reactor
from time import ctime

port=6674


#协议类
class Ser(protocol.Protocol):
    #对新的连接做处理
    def connectionMade(self):
        clnt=self.clnt=self.transport.getPeer().host#获取连接进来的客户端的地址
        print 'connect from',clnt #打印地址

    #数据处理
    def dataReceived(self, data):
        self.transport.write('[%s] %s' % (ctime(),data))


factory=protocol.Factory()  #生成具体工厂对象
factory.protocol=Ser
print 'waiting'
reactor.listenTCP(port,factory)   #注册监听
reactor.run()  #事件循环

1 先定义一个协议类,通过继承protocol.Protocol来实现。再重写里面的connectionMade方法和 dataReceived方法

connectionMade方法可以对新的连接做出回应

dataReceived方法每当收到数据时调用,其中可以添加自己的业务逻辑

self.transport对象,这个是所有的协议对象都有的成员,可以看出是从BaseProtocol就已经存在的。,其中write方法以非阻塞方式将一些数据以序列的形式写入物理连接。

2 生成工厂对象,Factory的工作是管理连接事件,并且创建Protocol对象处理每一个成功的连接。并且把先前定义好的协议赋予具体工厂对象

3 调用reactor进行端口监听以及时间循环

客户端:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/7/27 20:41
# @File    : cli1.py

"""
twisted 客户端
"""

from twisted.internet import protocol,reactor

host='127.0.0.1'
port=6674

#协议类
class Client(protocol.Protocol):
    #自定义的方法,进行数据传送
    def sendData(self):
        data=raw_input('>>>')
        if data:
            print 'send %s' % data
            self.transport.write(data)
        else:
            self.transport.loseConnection()
    
    #连接后便发送数据
    def connectionMade(self):
        self.sendData()

    def dataReceived(self, data):
        print data
        self.sendData()

class Fac(protocol.ClientFactory):
    protocol=Client
    clientConnectionLost =  clientConnectionFailed = 
    lambda self,connector,reason:reactor.stop()

reactor.connectTCP(host,port,Fac())
reactor.run()

1 定义协议类

2 实现工厂对象,此处通过继承protocol.ClientFactory来实现

ClientFactory为客户提供的协议工厂。这可以与reactor中的各种连接方法一起使用。

3 reactor进行连接,事件循环

最后

以上就是安静心锁为你收集整理的Python的Twisted入门 Python的Twisted入门的全部内容,希望文章能够帮你解决Python的Twisted入门 Python的Twisted入门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部