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 相关文章推荐
python实现巡检系统(solaris)示例
Apr 02 Python
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
Django框架下在URLconf中指定视图缓存的方法
Jul 23 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
详解用python实现简单的遗传算法
Jan 02 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
Flask实现跨域请求的处理方法
Sep 27 Python
python将一组数分成每3个一组的实例
Nov 14 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
提升python处理速度原理及方法实例
Dec 25 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
PHP实现长文章分页实例代码(附源码)
2016/02/03 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
解决layui table表单提示数据接口请求异常的问题
2019/09/24 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
大学毕业的自我鉴定
2013/10/08 职场文书
资金主管岗位职责范本
2014/03/04 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
努力学习保证书
2015/02/26 职场文书
2016公司新年问候语
2015/11/11 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
sql字段解析器的实现示例
2021/06/23 SQL Server
Go语言测试库testify使用学习
2022/07/23 Golang