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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
python3+PyQt5重新实现自定义数据拖放处理
Apr 19 Python
Python 实现字符串中指定位置插入一个字符
May 02 Python
python操作mysql代码总结
Jun 01 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 Python
call在Python中改进数列的实例讲解
Dec 09 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/07/05 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
js同时按下两个方向键
2007/12/01 Javascript
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python uuid模块使用实例
2015/04/08 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Keras 使用 Lambda层详解
2020/06/10 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
小学优秀班集体申报材料
2014/05/25 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
教师先进个人材料
2014/12/17 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
试了下Golang实现try catch的方法
2021/07/01 Golang
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技
如何利用python实现Simhash算法
2022/06/28 Python