使用Twisted交互服务器?

问题描述:

我一直在一些扭曲,我遇到了一个问题。我执行的是可以连接到使用telnet localhost x使用Twisted交互服务器?

我的代码处理类似这样的几台服务器:

reactor.listenTCP(12001, server1, ....)

reactor.listenTCP(12002, server2, ....)

这些然后使用我厂建协议

我想知道如何让这些服务器互相交互。例如,假设一个客户端发送一个请求来更新每个服务器的公共值,我想将这个值传递给其他服务器以更新其当前值。我看着reactor.connectTCP,但这似乎没有做我想要的。有没有办法连接到我的服务器而不使用telnet命令?

当然。使用普通的Python技术。让我们举一个更新值的例子。我要使它成为一个简单的计数器可能由连接递增到一台服务器并发送给连接到其它服务器的值:

from twisted.internet import reactor 
from twisted.internet.protocol import ServerFactory, Protocol 

class Counter(object): 
    def __init__(self): 
     self._value = 0 

    def increment(self): 
     self._value += 1 

    def get(self): 
     return self._value 


class Incrementor(Protocol): 
    def connectionMade(self): 
     self.factory.value.increment() 
     self.transport.loseConnection() 


class Reporter(Protocol): 
    def connectionMade(self): 
     self.transport.write("Value is %d\n" % (self.factory.value.get(),)) 
     self.transport.loseConnection() 

server1 = ServerFactory() 
server1.protocol = Incrementor 

server2 = ServerFactory() 
server2.protocol = Reporter 

server1.value = server2.value = Value() 

reactor.listenTCP(12001, server1) 
reactor.listenTCP(12002, server2) 
reactor.run() 

两个工厂现分享了一块可变状态。协议可以访问他们的工厂,因为默认ServerFactory有用地将自己设置为它实例化的协议的属性,所以协议也可以达到工厂上的共享可变状态。一个递增计数器,另一个检索该值。

您可以使用共享的状态和方法调用非协议,非工厂对象来构建像这样的许多场景。