python 编程之twisted详解及简单实例


Posted in Python onJanuary 28, 2017

python 编程之twisted详解

前言:

 我不擅长写socket代码。一是用c写起来比较麻烦,二是自己平时也没有这方面的需求。等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方。最近由于项目的原因需要写一些Python代码,才发现在python下面开发socket是一件多么爽的事情。

    对于大多数socket来说,用户其实只要关注三个事件就可以了。这分别是创建、删除、和收发数据。python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦。下面的代码来自twistedmatrix网站,我觉得挺不错的,贴在这里和大家分享一下。如果需要测试的话,直接telnet localhost 8123就可以了。如果需要在twisted中处理信号,可以先注册signal函数,在signal函数中调用reactor.stop(),后面twisted继续call stop_factory,这样就可以继续完成剩下的清理工作了。

from twisted.internet.protocol import Factory 
from twisted.protocols.basic import LineReceiver 
from twisted.internet import reactor 
 
class Chat(LineReceiver): 
 
  def __init__(self, users): 
    self.users = users 
    self.name = None 
    self.state = "GETNAME" 
 
  def connectionMade(self): 
    self.sendLine("What's your name?") 
 
  def connectionLost(self, reason): 
    if self.name in self.users: 
      del self.users[self.name] 
 
  def lineReceived(self, line): 
    if self.state == "GETNAME": 
      self.handle_GETNAME(line) 
    else: 
      self.handle_CHAT(line) 
 
  def handle_GETNAME(self, name): 
    if name in self.users: 
      self.sendLine("Name taken, please choose another.") 
      return 
    self.sendLine("Welcome, %s!" % (name,)) 
    self.name = name 
    self.users[name] = self 
    self.state = "CHAT" 
 
  def handle_CHAT(self, message): 
    message = "<%s> %s" % (self.name, message) 
    for name, protocol in self.users.iteritems(): 
      if protocol != self: 
        protocol.sendLine(message) 
 
 
class ChatFactory(Factory): 
 
  def __init__(self): 
    self.users = {} # maps user names to Chat instances 
 
  def buildProtocol(self, addr): 
    return Chat(self.users) 
 
  def startFactory(self): 
    print 'start' 
 
  def stopFactory(self): 
    print 'stop' 
 
reactor.listenTCP(8123, ChatFactory()) 
reactor.run()

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
windows下ipython的安装与使用详解
Oct 20 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
OpenCV 边缘检测
Jul 10 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
python 数据提取及拆分的实现代码
Aug 26 Python
opencv实现简单人脸识别
Feb 19 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
python模块内置属性概念及实例
Feb 18 Python
python3 删除所有自定义变量的操作
Apr 08 Python
详解python之简单主机批量管理工具
Jan 27 #Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 #Python
在Django同1个页面中的多表单处理详解
Jan 25 #Python
Python heapq使用详解及实例代码
Jan 25 #Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 #Python
Python调用C++程序的方法详解
Jan 24 #Python
python中import学习备忘笔记
Jan 24 #Python
You might like
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
css动画效果之animation的常用样式
2021/03/09 HTML / CSS
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jquery 事件冒泡的介绍以及如何阻止事件冒泡
2012/12/25 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
2020/05/03 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
Python导入oracle数据的方法
2015/07/10 Python
基于Python的接口测试框架实例
2016/11/04 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
阿迪达斯德国官方网站:adidas德国
2017/07/12 全球购物
摩托车和ATV零件、配件和服装的首选在线零售商:MotoSport
2017/12/22 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
区三好学生主要事迹
2014/01/30 职场文书
中学生家长评语大全
2014/04/16 职场文书
捐书倡议书
2014/08/29 职场文书
校长师德师风自我剖析材料
2014/09/29 职场文书
购房个人委托书范本
2014/10/11 职场文书
店面出租协议书范本
2014/11/28 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书