• 理解Twsited异步网络框架


    事件驱动 

      简而言之,事件驱动分为二个部分:第一,注册事件;第二,触发事件。自定义事件驱动框架,命名为:“弑君者”:

          事件服务器端:

     1 __author__ = 'lizheng'
     2 # !/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 event_list = []
     5 
     6 def run():
     7     for event in event_list:
     8         obj = event()
     9         obj.execute()
    10 
    11 
    12 class BaseHandler(object):
    13     """
    14     用户必须继承该类,从而规范所有类的方法(类似于接口的功能)
    15     """
    16     def execute(self):
    17         raise Exception('you must overwrite execute')
    View Code

         事件客户端,注册和触发事件

     1 __author__ = 'lizheng'
     2 # !/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 from day10 import event_drive
     5 
     6 
     7 class MyHandler(event_drive.BaseHandler):
     8 
     9     def execute(self):
    10         print('MyHandler is executing!')
    11 
    12 event_drive.event_list.append(MyHandler)
    13 event_drive.run()
    View Code

    Twsited异步网络框架

    Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议、线程、数据库管理、网络操作、电子邮件等。

    EchoServer

     1 __author__ = 'lizheng'
     2 # !/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 from twisted.internet import protocol
     5 from twisted.internet import reactor
     6 #定义Echo类,相当于socketserver里的MyTCPHandler,继承protocal.Protocal
     7 class Echo(protocol.Protocol):
     8     def dataReceived(self, data):
     9         self.transport.write(data)
    10 #定义主函数,将自己定的处理类Echo传给factory.protocol
    11 def main():
    12     factory = protocol.ServerFactory()
    13     factory.protocol = Echo
    14 #监听在factory,1234端口
    15     reactor.listenTCP(1234,factory)
    16     reactor.run()
    17 
    18 if __name__ == '__main__':
    19     main()
    View Code

    EchoClient

     1 __author__ = 'lizheng'
     2 # !/usr/bin/env python
     3 #-*- coding:utf-8 -*-
     4 from twisted.internet import reactor, protocol
     5 
     6 #定义一个客户端协议类,继承protocol.Protocol
     7 class EchoClient(protocol.Protocol):
     8 #一旦连接,发送消息
     9     def connectionMade(self):
    10         self.transport.write(bytes("hello alex!",'utf-8'))
    11 #收到消息,打印消息
    12     def dataReceived(self, data):
    13         print("Server said:", data)
    14 #打印完消息,调用connectionLost关闭连接
    15         self.transport.loseConnection()
    16 #关闭连接
    17     def connectionLost(self, reason):
    18         print("connection lost")
    19 #定义客户端工厂类
    20 class EchoFactory(protocol.ClientFactory):
    21 #将EchoClient传给protocol
    22     protocol = EchoClient
    23 #连接失败处理
    24     def clientConnectionFailed(self, connector, reason):
    25         print("Connection failed - goodbye!")
    26         reactor.stop()
    27 #连接丢失处理
    28     def clientConnectionLost(self, connector, reason):
    29         print("Connection lost - goodbye!")
    30         reactor.stop()
    31 
    32 
    33 
    34 def main():
    35 #客户端工厂实例化
    36     f = EchoFactory()
    37 #绑定本机的1234端口连接上服务端,传入客户端工厂实例进行消息发送和处理
    38     reactor.connectTCP("localhost", 1234, f)
    39     reactor.run()
    40 
    41 #程序主体
    42 if __name__ == '__main__':
    43     main()
    View Code
  • 相关阅读:
    结对编程作业
    4组-Alpha冲刺-2/6
    4组-Alpha冲刺-1/6
    结对编程作业
    4组 团队展示
    python多进程遇到的问题和解决
    GNS3第一次ping通
    前缀表达式计算(栈的使用)
    欧拉筛法(线性筛)素数
    拓扑排序
  • 原文地址:https://www.cnblogs.com/lizheng19822003/p/5366738.html
Copyright © 2020-2023  润新知