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 相关文章推荐
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
Python正则表达式完全指南
May 25 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
Python模拟百度自动输入搜索功能的实例
Feb 14 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
python能在浏览器能运行吗
Jun 17 Python
Python: glob匹配文件的操作
Dec 11 Python
python套接字socket通信
Apr 01 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 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
基于mysql的论坛(1)
2006/10/09 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
JavaScript效率调优经验
2009/06/04 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
Python+微信接口实现运维报警
2016/08/27 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python实现学员管理系统
2019/02/26 Python
python实现顺时针打印矩阵
2019/03/02 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
酒店总经理助理职责
2014/02/12 职场文书
电焊工岗位职责
2014/03/06 职场文书
农业生产宣传标语
2014/10/08 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
遗失证明范文
2015/06/19 职场文书