Python进阶第四课--网络编程(二)

1.前言

    上节的内容也是关于网络编程的,有好些个实用的模块。这节内容是对上节内容的补充,主要是关于Twisted网络框架,它能很好地和几个常见的GUI工具包协同工作。

2.编写Twisted服务器

    这部分以前得基本套接字服务器是显式的。其中的一些有很清楚的事件循环,用来查找新的连接和新数据,而基于SocketServer服务器有一个隐式的循环,在循环服务器查找连接并魏每个连接创建一个处理程序,单处理程序在要读取数据时必须是显式的。

    Twisted使用一个事件甚至多个基于事件的方法。要编写基本的服务器,就要实现处理比如新客户端连接、新数据到达以及一个客户端断开连接等事件的事件处理程序。具体的类能通过基本类建立更精炼的事件,比如包装“数据到达”事件、收集数据直到新的一行,然后触发“一行数据到达”的事件。

    事件处理程序在一个协议里面定义,在一个新的连接到达时,同样需要一个创建这种协议对象的工厂,我们称为factory。但是如果只是想要创建一个通用的协议类的实例,那么就可以使用和超类一样的模块中的协议。得到一个连接以后,时间处理程序connectionMade就会被调用,当连接丢失以后,connectionLost就会被调用。

    来自客户端的数据是通过处理程序dataReceived接收的。当然不能使用事件处理策略来吧数据发回客户端,如果要实现此功能就可以使用对象self.transport,这个对象有一个write方法,也有一个包含客户机地址的client属性。

    来看一个例子:使用了Twisted的简单服务器

from twisted.internet import reactor
from twisted.internet.protocol import Protocol,Factory


class SimplerLogger(Protocol):

    def connectionMade(self):
        print 'Got connection from', self.transport.client

    def connectionLost(self, reason):
        print self.transport.client, 'disconnect'

    def dataReceived(self, data):
        print data

factory=Factory()
factory.protocol=SimplerLogger


reactor.listenTCP(52763, factory)
reactor.run()

    我们必须实例化factory,还要设置它的protocol属性,这样它在和客户机通信时候就知道使用什么协议。然后就开始在给定的端口处使用工厂监听,这个工厂要通过实例化协议对象来准备处理连接。程序使用的是reactor中的listenTCP函数来监听,最后通过调用统一模块中的run函数启动函数。

    如果想了解更多关于Twisted的知识可以参考官方的参考文档哟。这里就先介绍到这里了。下一章节预告--web。

猜你喜欢

转载自blog.csdn.net/qq_34454366/article/details/80769002