您好,欢迎访问一九零五行业门户网

python 编程之twisted详解及简单实例

python 编程之twisted详解
前言:
我不擅长写socket代码。一是用c写起来比较麻烦,二是自己平时也没有这方面的需求。等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方。最近由于项目的原因需要写一些python代码,才发现在python下面开发socket是一件多么爽的事情。
对于大多数socket来说,用户其实只要关注三个事件就可以了。这分别是创建、删除、和收发数据。python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦。下面的代码来自twistedmatrix网站,我觉得挺不错的,贴在这里和大家分享一下。如果需要测试的话,直接telnet localhost 8123就可以了。如果需要在twisted中处理信号,可以先注册signal函数,在signal函数中调用reactor.stop(),后面twisted继续call stop_factory,这样就可以继续完成剩下的清理工作了。
from twisted.internet.protocol import factory from twisted.protocols.basic import linereceiver from twisted.internet import reactor class chat(linereceiver): 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): if self.state == "getname": self.handle_getname(line) else: self.handle_chat(line) def handle_getname(self, name): if name in self.users: self.sendline("name taken, please choose 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 chatfactory(factory): def __init__(self): self.users = {} # maps user names to chat instances def buildprotocol(self, addr): return chat(self.users) def startfactory(self): print 'start' def stopfactory(self): print 'stop' reactor.listentcp(8123, chatfactory()) reactor.run()
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
更多python 编程之twisted详解及简单实例。
其它类似信息

推荐信息