Twisted网络库编程实例

于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里。如果英文很烂,可以看中文,这里。总的来说我了解到的主要包括以下三个东东:Factory。protocol和Transport。这三个东西是什么呢:这三个东西都是Twisted写好的东西,可能你在阅读源码的时候发现,里面有很多没有实现的方法,没关系,这些是有你自己来实现的,只要你写的类继承上述三个就可以对没有实现的方法重写了。这个网络框架整体的来说,不算太难,只要弄懂就OK了。

  1. Factory:字面意思就是工厂,他主要是用来制作协议的
  2. Protocol:这里面主要是用来实现协议的及内容的。
  3. Transport:主要是用来发送和接收网络数据的功能。

下面来看一下一个Server实例假声一下理解:

 1 #coding='utf-8'
 2 from twisted.protocols.basic import LineReceiver
 3 from twisted.internet import reactor
 4 from twisted.internet.protocol import Factory
 5 
 6 class Chat(LineReceiver):#继承与protocol
 7     def __init__(self,users):
 8         self.users=users
 9         self.name=None
10         self.state="GETNAME"
11         
12     def connectionMade(self):
13         self.sendLine("what`s your name?")
14         
15         
16     def connectionLost(self, reason):
17         if self.name in self.users:
18             del self.users[self.name]
19             
20     def lineReceived(self, line):
21         print self.state
22         if self.state =="GETNAME":
23             print line
24             self.handle_GETNAME(line)
25         else:
26             self.handle_CHAT(line)
27             
28         print line
29             
30     def handle_GETNAME(self,name):
31         print name
32         if name  in self.users:
33             self.sendLine("Name taken, please chose another!")
34             return 
35         self.sendLine("welcome %s"%(name))
36         self.name=name
37         self.users[name]=self
38         self.state="CHAT"
39         
40     def handle_CHAT(self,message):
41         message="<%s> %s"%(self.name,message)
42         for name,protocol in self.users.iteritems():
43             if protocol != self:
44                 protocol.sendLine(message) 
45             
46 
47 class ChatFectory(Factory):#继承与Factory`
48     def __init__(self):
49         self.users={}
50         
51     def buildProtocol(self, addr):
52         return Chat(self.users)
53 
54 reactor.listenTCP(8123,ChatFectory())
55 reactor.run()

变异的时候可能会由于编码问题导致失败,用户可以将第一行的编码方式改一下就ok了:

#-*- coding:utf-8 -*-

  是不是编译过了,但是会不会有疑问呢:什么都没有,怎么看运行过程?没关系,下面打开你的电脑,使用win自带的telnet工具进行连接就OK了。记住端口要一直哦。

打开CMD窗口输入:

telnet127.0.0.1 8123

  进入可以看到她和你说了一句:你叫什么名字?你输入你的名字后,他会说一句欢迎你

作者:first_semon
         
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题,欢迎交流
原文地址:https://www.cnblogs.com/first-semon/p/8584035.html