书写一个twisted的Daemon

书写步骤

实质上会关注三个层次的对象。它们互相可配置,可独立开发,只需要通过简单的调用配置就可结合使用。
1.就是侦听的建立、工厂的初始化、服务器的运行,它需要reactor的开发。

2.服务的初始化、用户连接的建立、持久配置数据的存储、协议的实例化,它需要factory的开发。

3.用户连接建立后的事件处理,它需要protocol的开发了

提示
请求和实例化的顺序是reactor、factory、protocol。但是真实的开发顺序返回是倒过来的,因为你可能最初始得到的需求是要用什么协议,在设计协义时才能了解需要哪些持久数据和在所有的用户请求是需要共享的内容,以及初始化时所需要完成的事务,最终你才能依据你要应用的平台来考虑优化的方法。

protocol开发

建立服务器的第一个要解决的问题就是服务与外界的交流协议。协议的定义在twisted中是通过继承twisted.internet.protocol.Protocol类来实现的。在协议中你可以定义连接、数据接收、断开连接等一系列的事件如果进行响应。但是对于所有连接上来的协议的建立、持久配置数据的存储这样的内容并不会保存在协议中。每一个Twisted的Protocols类实例都为一个具体的连接提供协议解析。

factory开发

持久配置数据的存储通常都会保存在工厂里。工厂的定义在twisted中是通过继承twisted.internet.protocol.Factory类来实现的。twisted提供了缺省的工厂实现最为普通的需求。它会实例化每个协议,并且通过设置每个协议中factory属性来使协议可以使用到它自己,做这个设置的作用就是让协议在进行处理连接数据时可以使用到工厂中存储的持久配置数据。工厂的启动是需要reactor真实的建立侦听并启动才可以实现的。

reactor开发

reactor侦听的建立可以参考twisted.internet.interfaces.IReactorTCP.listenTCP。这时我们先只说建立TCP服务器的侦听,如果你需要其它种类的侦听建立参考IReactor*.listen*系列API。

实例说明

服务端

//server.py
from twisted.internet import reactor
from twisted.internet.protocol import Protocol,Factory

class SimpleServer(Protocol):
    def connectionMade(self):
            print "hello"

    def connectionLost(self,reason):
            print "byebye"

    def dataReceived(self,data):
            print  data
            self.transport.write(data)

    def lineReceived(self,line):
            print line

factory = Factory()
factory.protocol = SimpleServer

port = 8001
reactor.listenTCP(port, factory)
reactor.run()   

客户端

//client.py
import socket
import time

s = socket.socket()
server =  "127.0.0.1"
port = 8001
s.connect((server, port))
s.send("this is client1\n")
s.send("123456\n")
print s.recv(1024)
time.sleep(100)
s.close()   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值