5、twisted框架介绍
- twisted是一个完整的事件驱动的网络框架,利用它既能使用也能开发完整的异步网络应用程序和协议。
- twisted提供了大量的支持来建立完整的系统,包括网络协议、线程、安全性和身份验证、聊天/IM、DBM及RDBMS数据库集成、Web/因特网、电子邮件、命令行参数、GUI集成工具包等。
- twisted不是Python标准库的一部分,所以必须单独下载并安装它
1、创建Twisted Reactor TCP服务器
- 当一个客户端连接到服务器时就会执行connectionMade()方法,
- 当服务器接收到客户端通过网络发送的一些数据时就会调用dataReceived()方法。
- reactor会作为该方法的一个参数在数据中传输,这样就能在无须自己提取它的情况下访问它。
- 传输实例对象解决了如何与客户端通信的问题。
- 在服务器代码的最后部分中,创建了一个协议工厂。它之所以被称为工厂,是因为每次得到一个接入连接时,都能“制造”协议的一个实例。
- 然后在reactor中安装一个TCP监听器,以此检查服务请求。当它接收到一个请求时,就会创建一个TSServProtocol实例来处理
- 那个客户端的事务。
###python3.8
#!/usr/bin/env python
from twisted.internet import protocol, reactor
from time import ctime
PORT = 21566
class TSServProtocol(protocol.Protocol):
def connectionMade(self): #重写connectMade方法
clnt = self.clnt = self.transport.getPeer().host #获取主机信息
print('...connect from', clnt)
def dataReceive(self, data): #接收数据
self.transport.write('[%s] %s' %(ctime(), data.encode()))
factory = protocol.Factory() #创建了一个协议工厂,每次得到一个接入连接时,都能制造协议的一个实例,然后在reactor中安装一个TCP监听器,以此检查服务请求,
factory.protocol = TSServProtocol
print('waiting for connection...')
reactor.listenTCP(PORT, factory)
reactor.run()
2、创建Twisted Reactor TCP客户端
###python3.8
# !/usr/bin/env python
from twisted.internet import protocol, reactor
HOST = 'localhost'
PORT = 21566
class TSClntProtocol(protocol.Protocol):
def senData(self):
data = input('>')
data = data.encode()
if data:
print('...sending %s ....' % str(data,'utf8'))
self.transport.loseConnection() #执行losseConnection关闭套接字
def connectionMade(self):
self.senData()
def dataReceived(self, data):
print(data)
self.senData()
class TSClntFactory(protocol.ClientFactory):
protocol = TSClntProtocol
clientConnectionLost = clientConnectionFailed = lambda self,connector, reason:reactor.stop()
reactor.connectTCP(HOST, PORT, TSClntFactory()) #创建客户端工厂,创建了一个到服务器的连接并运行reactor
reactor.run()