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/ ...
随机推荐
- Aop理解 ioc理解
AOP 把 [核心代码]和[非核心代码]分离 提高开发的效率 java设计模式: https://www.cnblogs.com/malihe/p/6891920.html N+1就是: 1:一条查询 ...
- unity中将多个图片进行椭圆排序
//保存需要排序的精灵容器 public GameObject[] Sprites; public Transform centrePoint;//椭圆的中心点 ;//每个方块间的角度偏移 //保存位 ...
- Java--- Ajax异步验证用户名是否存在
今天复习了一下 Ajax异步验证用户名是否存在,在下面我写三种,一般开发时候都用第三种 jQuery和Ajax结合的形式,下面就介绍三种,具体说明代码里就有啦,废话不多说,直接上代码: 第一种方式: ...
- tensorFlow(四)浅层神经网络
tensorFlow见基础 实验 MNIST数据集介绍 MNIST是一个手写阿拉伯数字的数据集. 其中包含有60000个已经标注了的训练集,还有10000个用于测试的测试集. 本次实验的任务就是通过手 ...
- 调用shutdown.sh后出现could not contact localhost8005 tomcat may not be running报错问题
之前调用tomcat的shutdown.sh无法关闭tomcat,一直报could not contact localhost8005 tomcat may not be running错. 在网上找 ...
- Spring源码学习(3)—— 自定义标签
上一篇讲了Spring对默认标签的解析,Spring提供了很多属性,可以供开发者根据不同情况使用.绝大多数情况下,这些功能就已经足够了.但是,当用户有更特殊的需求,又或者很多公司自己实现的服务治理框架 ...
- MySQL5.7 GTID学习笔记
GTID(global transaction identifier)是对于一个已提交事务的全局唯一编号,前一部分是server_uuid,后面一部分是执行事务的唯一标志,通常是自增的. 下表整理了G ...
- ubuntu16.04 配置双网卡机器
本文介绍一台具有双有线网卡的机器在Linux下如何配置双网卡 系统平台:Ubuntu16.04 1:查看机器网卡信息,是否双网卡都能正确被机器pci识别 可以通过以下命令查看设备网卡,若果看到两条网卡 ...
- 神州数码OSPF基于端口认证(简单认证、MD5认证)
实验要求:掌握OSPF基于端口认证方式 拓扑如下 简单认证 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface s0/1 进入端口 i ...
- MVVM设计模式加RAC响应式编程
一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...