2019独角兽企业重金招聘Python工程师标准>>>

#! /usr/bin/env python
#coding=utf-8
from twisted.internet import protocol, reactor, defer
from twisted.protocols import basic
from gcutils.db import MySQLMgr
import sys
from twisted.internet.protocol import ServerFactory
from twisted.protocols.basic import LineReceiver
from twisted.python import log
from twisted.internet import reactorclass CmdProtocol(LineReceiver):delimiter = '\n'def connectionMade(self):self.client_ip = self.transport.getPeer().hostlog.msg("Client connection from %s" % self.client_ip)if len(self.factory.clients) >= self.factory.clients_max:log.msg("Too many connections. bye !")self.client_ip = Noneself.transport.loseConnection()else:self.factory.clients.append(self.client_ip)def connectionLost(self, reason):log.msg('Lost client connection. Reason: %s' % reason)if self.client_ip:self.factory.clients.remove(self.client_ip)def lineReceived(self, line):log.msg('Cmd received from %s : %s' % (self.client_ip, line))class MyFactory(ServerFactory):protocol=CmdProtocoldef __init__(self, clients_max=10):self.clients_max = clients_maxself.clients = []log.startLogging(sys.stdout)
reactor.listenTCP(9999, MyFactory(2))
reactor.run()在上面的代码中我们创建了"ServerFactory"类,这个工厂类负责返回“CmdProtocol”的实例。每一个连接都由实例化的“CmdProtocol”实例来做处理。 Twisted的reactor会在TCP连接上后自动创建CmdProtocol的实例。如你所见,protocol类的方法都对应着一种事件处理。
当client连上server之后会触发“connectionMade"方法,在这个方法中你可以做一些
鉴权之类的操作,也可以限制客户端的连接总数。每一个protocol的实例都有一个工厂
的引用,使用self.factory可以访问所在的工厂实例。
上面实现的”CmdProtocol“是twisted.protocols.basic.LineReceiver的子类,
LineReceiver类会将客户端发送的数据按照换行符分隔,每到一个换行符都会触发
lineReceived方法。稍后我们可以增强LineReceived来解析命令。
Twisted实现了自己的日志系统,这里我们配置将日志输出到stdout
当执行reactor.listenTCP时我们将工厂绑定到了9999端口开始监听。

转载于:https://my.oschina.net/u/1458120/blog/552877

twisted 网络通信的简单例子相关推荐

  1. Linux-C TCP简单例子

    Linux-C TCP简单例子 一.简述        记-使用TCP协议通信的简单例子. 例子1:一个客户端,一个服务端,客户端发送信息,服务端就收信息. 例子2:使用多线程实现  服务器与客户端的 ...

  2. webpack入门之简单例子跑起来

    webpack入门之简单例子跑起来 webpack介绍 Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将很多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载 ...

  3. 图片上传(加水印、缩略图、远程保存)的简单例子

    图片上传(加水印.缩略图.远程保存)的简单例子(应用于51aspx.com) 该源码下载地址:http://51aspx.com/CV/ImageUpload 今天看到xiongeee发的文章使用使用 ...

  4. java hashtable import,Hashtable的一个简单例子

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 以下是关于Hashtable的简单例子,谁知道别的遍历Hashtable的方法,请回复! package no1; import java.util.En ...

  5. SAP MM采购定价过程的一个简单例子

    SAP MM采购定价过程的一个简单例子 本文以一个简单的例子阐述了SAP MM模块中采购定价的基本原理.本例中,假定采购订单里输入的是含税采购价,然后系统自动计算出物料最终的采购价格(含税价-税额=采 ...

  6. .net中使用反射的简单例子

    说明:由于工作原因,本人使用反射的机会不是很多,所以没有必要为了炫耀技术而使用这种技术,不过今天有人问到这方面的问题,所以做了一个简单例子,供初学者参考,代码如下: using System; usi ...

  7. linux下Makefile中包含有shared library动态链接库文件时候的简单例子

    如果不知道什么是makefile,可以首先看我的另一篇博客: linux下Makefile的简单例子及解释 http://www.cnblogs.com/lihaozy/archive/2012/08 ...

  8. java 国际化例子_JavaSE 国际化 简单例子

    ①在src下添加两个文件: base_zh_CN.properties Test=\u8fd9\u662f\u4e2d\u6587 base_en_US.properties Test=english ...

  9. 6翻了C语言,《嗨翻C语言》随书练习六 6章 二叉树简单例子

    二叉树简单例子/* <嗨翻C语言>随书练习 6章    2016-12-06 xiousheng@126.com  二叉树例子,警务罪犯判断档案系统,哈哈 书中可以专家系统例子 */ #i ...

最新文章

  1. apm最高的记录_2020年秋季APM专业课推荐
  2. Bzoj-2820 YY的GCD Mobius反演,分块
  3. hdu oj1094题解
  4. mysql导出数据字典6_MySQL利用Navicat导出数据字典
  5. 学习UpdatePanel控件
  6. 一个人学的软件测试,到底有多难?
  7. GitHub C 和 C++ 开源库的清单(含示例代码)
  8. 端侧机器学习框架 Tensorlfow Lite
  9. Atitit nlp用到的技术与功能自然语言处理 v3 t99.docx Atitit nlp用到的技术与常见类库 目录 1. 常用的技术 1 1.1. 语言处理基础技术 分词 相似度等 1 1.2
  10. linux虚拟机上挂载U盘
  11. 13届蓝桥杯c++组日常练习问题记录
  12. 基于vue3.0全家桶H5模板
  13. Django 4.x Caches 缓存使用示例和配置方法
  14. 程序员软技能:职场、学习、生活,代码之外生存之南
  15. JGG | 中科院微生物研究所王军团队发现肠系膜淋巴系统可能为肠-肝轴第二通路...
  16. 一行代码搞定Android弧形卫星动画菜单(附Demo)
  17. 微信小程序使用mock.js
  18. 云周刊】第177期:马云见证!蚂蚁金服推出全球首个区块链跨境汇款服务
  19. 三、简单刷题APP(题库是Excel)之在APP添加题目
  20. 121. 买卖股票的最佳时机

热门文章

  1. Ubuntu 配置MySQL远程连接
  2. linux开机启动详细流程图
  3. absolute元素水平居中
  4. STL_算法_区间的比較(equal、mismatch、 lexicographical_compare)
  5. BZOJ3343 教主的魔法 二分法+分块
  6. ORA-00119,ORA-00132 错误处理
  7. 为什么中文分词比英文分词更难?有哪些常用算法?(附代码)
  8. 致敬百年南开!南开大学作译者30本必读经典著作
  9. 跟着阿里大牛捞干货:2019这5本书带你玩转大数据
  10. Facebook泄露隐私算什么?国内一次外卖,竟让4万用户全“裸着”