[英]Create client/server with 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 中實例化,所以我無法訪問將數據發送到客戶端所需的傳輸。
您似乎缺少的唯一一件事是您可以保留一個客戶端連接列表,並使該列表可供嘗試向所有客戶端發送數據的代碼使用。
在 Twisted FAQ 中有一個例子: http : //twistedmatrix.com/trac/wiki/FrequentlyAskedQuestions#HowdoImakeinputononeconnectionresultinoutputonanother
那個例子只有一個工廠,但想法是一樣的。 要處理您有兩個工廠的情況,只需給一個工廠參考另一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.