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/ ...
随机推荐
- 两小时内sql
select convert(datetime,convert(char(20),dateadd(hour,-2,getdate())))
- atom插件安装失败解决方法
在atom 上下载插件失败,可以用下面的方法. 1.找到C:/Users/你的用户名/.atom/packages/文件夹内 2.在.atom packages 目录下 使用gitbash 3.git ...
- constructor&object 的对比
Constructor vs object A constructor is a special member function in the class to allocate memory to ...
- kafka分区及副本在broker的分配
kafka分区及副本在broker的分配 部分内容參考自:http://blog.csdn.net/lizhitao/article/details/41778193 以下以一个Kafka集群中4个B ...
- clearfix 用法
如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有 clear,导致不能被撑开.看下面的例子:Div布局如下:Css代码如下:.out{border:1 ...
- 剑指Offer 7. 斐波那契数列 (递归)
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题目地址 https://www.nowcoder.com/prac ...
- Python: Windows下pip安装库出错:Microsoft Visual C++ 9.0 is required < Unable to find vcvarsall.bat
由于vs编译环境问题,需要设定vs2008的环境变量,如果机器上装有其他版本的vs比如vs2012, 可以做设定例如SET VS90COMNTOOLS=%VS120COMNTOOLS%即可
- mysql in 查询参数化
mysql查询语句where条件in mysql查询语句where条件in 正常情况需要查询的语句:select *from temp where id in ('1','2','3','4','5' ...
- because there was insufficient free space available after evicting expired cache entries
Tomcat运行的时候哗哗哗的报警告 版本是Tomcat 8.5.15 告警信息关键字如下 because there was insufficient free space available af ...
- lvs基础及部署
LVS简介 LVS--Linux Vritual Server 即linux虚拟服务器,1998年5月由章文嵩博士开发并开源,目前全球多个国家的企业单位都在使用LVS构建集群服务. LVS可实 ...