zoukankan      html  css  js  c++  java
  • 0X04-Twisted Teactor TCP Server

    Twisted Teactor TCP Server

    #! /usr/bin/env python
    from twisted.internet import protocol,reactor
    from time import ctime
    '''
    这是一个时间戳TCP服务器,它使用了Twisted Internet类
    Twisted是用Python实现的基于事件驱动的网络引擎框架:https://www.cnblogs.com/silence-cho/p/9898984.html
    '''
    PORT = 21567
    '''
    1;reactor是twisted异步框架中的核心组件,是一个基于select,poll或epoll的事件循环,其监听socket的状态,当socket状态有变化时(有新的连接请求,或接受到数据等)时,调用相应的组件来进行处理。
    2;Factory: 主要用来创建protocol,也可以定义其他操作
    3;Protocol:主要用来处理连接建立和断开时的操作,以及数据的接受和发送操作
    
    '''
    class TSServProtocol(protocol.Protocol):
        def connectionMade(self):
            clnt = self.clnt = self.transport.getPeer().host
            print('...connected from:',clnt)
        def dataReceived(self, data):
            self.transport.write(data)
    
    factory = protocol.Factory()
    factory.protocol = TSServProtocol
    print('waiting for connection...')
    reactor.listenTCP(PORT,factory)
    reactor.run()
    
    '''
    英语翻译:
        1;protocol 协议
        2;reactor 反应器
    '''

    Twisted Teactor TCP Client

    #! /usr/bin/env python
    from twisted.internet import protocol,reactor
    
    HOST = 'localhost'
    PORT = 21567
    
    class TSClntProtocol(protocol.Protocol):
        def sendData(self):
            data = input('> ')
            if data:
                print("...sending %s..." % data)
                self.transport.write(data)
            else:
                self.transport.loseConnection()
    
        def connectionMade(self):
            self.sendData()
    
        def dataReceived(self, data):
            print(data)
            self.sendData()
    
    class TSClntFactory(property.ClientFactory):
        protocol = TSClntProtocol
        clientConnectionLost = clientConnectionFailed = lambda self ,connector,reason:reactor.stop()
    
    reactor.connectTcp(HOST,PORT,TSClntFactory())
    reactor.run()
  • 相关阅读:
    [Unity官方文档翻译]Primitive and Placeholder Objects Unity原生3D物体教程
    开源一个简易轻量的reactor网络框架
    架构设计:系统存储(28)——分布式文件系统Ceph(挂载)
    实现连接池技术的样例
    <html>
    nyoj 1239 引水project (河南省第八届acm程序设计大赛)
    Java Jdk1.8 HashMap源代码阅读笔记二
    Course Schedule
    Ubuntu Git安装与使用
    HTML5学习笔记(十九):Lambda和Promise
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12509661.html
Copyright © 2011-2022 走看看