于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里。如果英文很烂,可以看中文,这里。总的来说我了解到的主要包括以下三个东东:Factory。protocol和Transport。这三个东西是什么呢:这三个东西都是Twisted写好的东西,可能你在阅读源码的时候发现,里面有很多没有实现的方法,没关系,这些是有你自己来实现的,只要你写的类继承上述三个就可以对没有实现的方法重写了。这个网络框架整体的来说,不算太难,只要弄懂就OK了。
- Factory:字面意思就是工厂,他主要是用来制作协议的
- Protocol:这里面主要是用来实现协议的及内容的。
- 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
进入可以看到她和你说了一句:你叫什么名字?你输入你的名字后,他会说一句欢迎你