-
Twisted
Twisted是以高性能为目标的异步网络编程框架。每一个路由器对应一个reactor
twisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议 -
Reactor
reactor是事件管理器,用于注册、注销事件,运行事件循环,当事件发生时调用回调函数处理。
1. Twisted的reactor只有通过调用reactor.run()来启动。
2. reactor循环是运行在主进程中。
3. 一旦启动,就会一直运行下去。reactor就会在程序的控制下(或者具体在一个启动它的线程的控制下)。
4. reactor循环并不会消耗任何CPU的资源。
5. 不需要显式的创建和安装reactor,只需要引入就OK了
6. 在Twisted中,reactor是Singleton(也就是单例模式),即在一个程序中只能有一个reactor,并且只要你引入它就相应地创建一个
7. reactor是管理twisted框架的核心
8. 所有的事件都会触发reactor,然后他会开启服务,初始化factory,factory再初始化protocol。 -
Factory
保存的是连接方的信息,当有链接过来时,factory会初始化一个protocol与对方建立连接,所以factory中有protocol. 因为protocol的方法经常会用到factory里的属性变量,所以protocol类中也有factory。这里就有一个循环引用的问题
protocol说白了就是你自己编的程序
-
应用场景:
控制器的探针把自己模拟成一台路由器,不停的与拓扑中的其他路由器发送和接收bgp报文,并根据收到的不同报文做响应处理,python使用struct来处理二进制报文,struct.pack(二进制数)解析成各种类型 -
FSM:
类似etcd,当收到keep alive报文的类型是ST_OPENCONFIRM后,将status状态改为EST,并记录下当前时间保存在数据库