Twisted网络库编程实例
于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里。如果英文很烂,可以看中文,这里。总的来说我了解到的主要包括以下三个东东:Factory。protocol和Transport。这三个东西是什么呢:这三个东西都是Twisted写好的东西,可能你在阅读源码的时候发现,里面有很多没有实现的方法,没关系,这些是有你自己来实现的,只要你写的类继承上述三个就可以对没有实现的方法重写了。这个网络框架整体的来说,不算太难,只要弄懂就OK了。
- Factory:字面意思就是工厂,他主要是用来制作协议的
- Protocol:这里面主要是用来实现协议的及内容的。
- Transport:主要是用来发送和接收网络数据的功能。
下面来看一下一个Server实例假声一下理解:
#coding='utf-8'
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
from twisted.internet.protocol import Factory class Chat(LineReceiver):#继承与protocol
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):
print self.state
if self.state =="GETNAME":
print line
self.handle_GETNAME(line)
else:
self.handle_CHAT(line) print line def handle_GETNAME(self,name):
print name
if name in self.users:
self.sendLine("Name taken, please chose 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 ChatFectory(Factory):#继承与Factory`
def __init__(self):
self.users={} def buildProtocol(self, addr):
return Chat(self.users) reactor.listenTCP(8123,ChatFectory())
reactor.run()
变异的时候可能会由于编码问题导致失败,用户可以将第一行的编码方式改一下就ok了:
#-*- coding:utf-8 -*-
是不是编译过了,但是会不会有疑问呢:什么都没有,怎么看运行过程?没关系,下面打开你的电脑,使用win自带的telnet工具进行连接就OK了。记住端口要一直哦。
打开CMD窗口输入:
telnet127.0.0.1 8123
进入可以看到她和你说了一句:你叫什么名字?你输入你的名字后,他会说一句欢迎你
Twisted网络库编程实例的更多相关文章
- 使用python网络库下载
下载1000次网页资源 1,普通循环方式下载1000次,非常慢 #!/usr/bin/python # -*- coding: utf-8 -*- import sys import os impor ...
- 《Linux 多线程服务端编程:使用 muduo C++ 网络库》电子版上市
<Linux 多线程服务端编程:使用 muduo C++ 网络库> 电子版已在京东和亚马逊上市销售. 京东购买地址:http://e.jd.com/30149978.html 亚马逊Kin ...
- 《Linux多线程服务端编程:使用muduo C++网络库》上市半年重印两次,总印数达到了9000册
<Linux多线程服务端编程:使用muduo C++网络库>这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错 ...
- Android studio 下JNI编程实例并生成so库
Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...
- Linux多线程服务端编程:使用muduo C++网络库
内容推荐本 书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread.这 ...
- php网络编程实例
php网络编程实例 一.总结 一句话总结: socket_create():创建socket socket_bind():绑定IP和端口 socket_listen():监听客户端信息 <?ph ...
- 长文梳理muduo网络库核心代码、剖析优秀编程细节
前言 muduo库是陈硕个人开发的tcp网络编程库,支持Reactor模型,推荐大家阅读陈硕写的<Linux多线程服务端编程:使用muduo C++网络库>.本人前段时间出于个人学习.找工 ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- 陈硕 - Linux 多线程服务端编程 - muduo 网络库作者
http://chenshuo.com/book/ Muduo网络库源码分析(一) EventLoop事件循环(Poller和Channel)http://blog.csdn.net/nk_test/ ...
随机推荐
- CentOS 使用yum命令安装出现错误提示”could not retrieve mirrorlist http://mirrorlist.centos.org
CentOS 使用yum命令安装出现错误提示"could not retrieve mirrorlist http://mirrorlist.centos.org这个错误, 在网上找了好多, ...
- python-基础数据类型,集合及深浅copy
一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...
- SEH X86
( windows 提供的异常处理机制实际上只是一个简单的框架,一般情况下开发人员都不会直接用到.我们通常所用的异常处理(比如 C++ 的 throw.try.catch)都是编译器在系统提供的异常处 ...
- virsh命令和虚拟机克隆
virsh 命令 virsh list //列出正在运行虚拟机 virsh list --all //列出所有虚拟机 virsh console sunhao-1 //进入名字为sunh ...
- Linux基础知识_Shell编程笔记
以下是一些 常用功能 , 基于 centos 6.5 x64 # cp /etc/localtime /etc/localtime.org # rm /etc/localtime # ln -s /u ...
- freckles
题目描述: In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back ...
- Vue2.0
Vue 1.0到2.0的变化: 1.在每个组件的模板中,不再支持片段代码 组件中的模板: 之前: <template> <h3我是组件<strong>我是加粗模板< ...
- flask自定义处理错误方法
自定义错误处理方法: 当客户端访问浏览器是,得到相对应的状态码,服务器通过状态码给用户相对应的页面. @app.errorhandler(404) def handle_404_error(err): ...
- 2018.5.2 file结构体
f_flags,File Status Flag f_pos,表示当前读写位置 f_count,表示引用计数(Reference Count): dup.fork等系统调用会导致多个文件描述符指向同一 ...
- 开源WHMCS支付宝当面付和即时到账插件
开源WHMCS支付宝当面付和即时到账插件 链接: https://pan.baidu.com/s/1i5HU4hn 密码: crq7