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爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Python实现登录接口的示例代码
Jul 21 Python
Django的分页器实例(paginator)
Dec 01 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
Aug 07 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
pytorch--之halfTensor的使用详解
May 24 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
nodejs文件操作模块FS(File System)常用函数简明总结
2014/06/05 NodeJs
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
基于Vue生产环境部署详解
2017/09/15 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
vue a标签点击实现赋值方式
2020/09/07 Javascript
[02:34]DOTA2亚洲邀请赛 BG战队出场宣传片
2015/03/09 DOTA
初学Python实用技巧两则
2014/08/29 Python
python使用mailbox打印电子邮件的方法
2015/04/30 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
英国网上花店:Bunches
2016/11/29 全球购物
行政助理求职自荐信
2013/10/26 职场文书
篮球比赛口号
2014/06/10 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
使用pytorch实现线性回归
2021/04/11 Python
python flask开发的简单基金查询工具
2021/06/02 Python