2011-03-28 40 views
6

我正嘗試使用Twisted創建客戶端/服務器。 我想創建一個守護進程,它將作爲客戶端連接到另一臺服務器,並充當其他客戶端的服務器。 我已經寫類似的東西至極我想說明我的問題:使用Twisted創建客戶端/服務器

server = sys.argv[1] 
control_port = 8001 

class ControlClient(protocol.Protocol): 
    def makeConnection(self, transport): 
     [some code here -snip-] 
     self.firstOrder(order, transport) 

    def firstOrder(self, action, transport): 
     self.t = transport 
     self.t.write(action + "\0") 

    def sendOrder(self, action): 
     self.t.write(action + "\0") 

    def dataReceived(self, data): 
     [some code here -snip-] 
     [HERE I WANT TO SEND DATA TO CLIENTS CONNECTED TO MY TWISTED SERVER, USING CONTROL SERVER] 

class ControlServer(ControlClient): 
    def dataReceived(self, data): 
     print "client said " + data 

    def makeConnection(self, transport): 
     self.t = transport 
     self.t.write("make connection") 
     print "make connection" 

    def sendData(self, data): 
     self.t.write("data") 

class ClientFactory(protocol.ClientFactory): 
    protocol = ControlClient 

    def clientConnectionFailed(self, connector, reason): 
     print "Connection failed - goodbye!" 
     reactor.stop() 

    def clientConnectionLost(self, connector, reason): 
     print "Connection lost - goodbye!" 
     reactor.stop() 

class ServerFactory(protocol.ServerFactory): 
    protocol = ControlServer 

def main(): 
    c = ClientFactory() 
    reactor.connectTCP(server, control_port, c) 
    s = ServerFactory() 
    reactor.listenTCP(9000, s) 
    reactor.run() 

if __name__ == '__main__': 
    main() 

正如你所看到的,我要寄(服務器)收到了一些數據(客戶端)。我的問題當然是我的ServerControl沒有在我的ClientControl中實例化,所以我沒有訪問傳輸需要發送數據到客戶端。

很抱歉,如果我不理解,我提前任何幫助我在Python和扭曲的新的和英語是沒有我的主要語言:( 隨意問,如果你失去了一些東西!

感謝= )

回答

3

您似乎缺少的唯一東西是您可以保留您的客戶端連接列表,並使該列表可用於試圖向所有客戶端發送數據的代碼。

有這樣的扭曲的常見問題的例子:http://twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#HowdoImakeinputononeconnectionresultinoutputonanother

這個例子只有一個工廠,但這個想法是一樣的。爲了處理兩個工廠的情況,只需給一個工廠參考另一個工廠。

+0

嗨,謝謝你的回答我會試試這個。這似乎是一個很好的解決方案。 – tirlototo 2011-03-29 08:01:11

+0

好吧,再次感謝您的幫助,它的作品非常棒!有一個愉快的一天=) – tirlototo 2011-03-29 10:04:50

+0

ahah你是一個扭曲的發展; =) – tirlototo 2011-03-29 10:07:14