2011-03-03 73 views
0

我一直在一些扭曲,我遇到了一個問題。我執行的是可以連接到使用telnet localhost x使用Twisted交互服務器?

我的代碼處理類似這樣的幾臺服務器:

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

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

這些然後使用我廠建協議

我想知道如何讓這些服務器互相交互。例如,假設一個客戶端發送一個請求來更新每個服務器的公共值,我想將這個值傳遞給其他服務器以更新其當前值。我看着reactor.connectTCP,但這似乎沒有做我想要的。有沒有辦法連接到我的服務器而不使用telnet命令?

回答

0

當然。使用普通的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有用地將自己設置爲它實例化的協議的屬性,所以協議也可以達到工廠上的共享可變狀態。一個遞增計數器,另一個檢索該值。

您可以使用共享的狀態和方法調用非協議,非工廠對象來構建像這樣的許多場景。