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实现识别手写数字 python图像识别算法
Mar 23 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
Python txt文件常用读写操作代码实例
Aug 03 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
python中四舍五入的正确打开方式
Jan 18 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 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伪静态的实现详细介绍
2013/04/28 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
2011/11/21 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
2019/09/02 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
vue配置多代理服务接口地址操作
2020/09/08 Javascript
使用Python生成url短链接的方法
2015/05/04 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
女子职高个人自荐书
2014/02/01 职场文书
医院总经理岗位职责
2014/02/04 职场文书
应届大学生自荐书
2014/06/17 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
大学生学年个人总结
2015/02/15 职场文书
员工家属慰问信
2015/03/24 职场文书
教师文明餐桌光盘行动倡议书
2015/04/28 职场文书
十个Python自动化常用操作,即拿即用
2021/05/10 Python
7个关于Python的经典基础案例
2021/11/07 Python