2010-07-18 4 views
9

मैं एक मुड़ सर्वर कैसे बना सकता हूं जो क्लाइंट भी है? मैं रिएक्टर को सुनना चाहता हूं जबकि एक ही समय में इसका उपयोग उसी सर्वर इंस्टेंस से कनेक्ट करने के लिए भी किया जा सकता है जो कनेक्ट और सुन सकता है।एक मुड़ सर्वर कैसे लिखना है जो एक ग्राहक भी है?

उत्तर

15

कॉल reactor.listenTCP और reactor.connectTCP पर कॉल करें। आप जितने चाहें उतने अलग-अलग प्रकार के कनेक्शन - सर्वर या क्लाइंट्स प्राप्त कर सकते हैं।

उदाहरण के लिए:

from twisted.internet import protocol, reactor 
from twisted.protocols import basic 

class SomeServerProtocol(basic.LineReceiver): 
    def lineReceived(self, line): 
     host, port = line.split() 
     port = int(port) 
     factory = protocol.ClientFactory() 
     factory.protocol = SomeClientProtocol 
     reactor.connectTCP(host, port, factory) 

class SomeClientProtocol(basic.LineReceiver): 
    def connectionMade(self): 
     self.sendLine("Hello!") 
     self.transport.loseConnection() 

def main(): 
    import sys 
    from twisted.python import log 

    log.startLogging(sys.stdout) 
    factory = protocol.ServerFactory() 
    factory.protocol = SomeServerProtocol 
    reactor.listenTCP(12345, factory) 
    reactor.run() 

if __name__ == '__main__': 
    main() 
+0

उम .. मैं यह कैसे एक ही कोड ऊपर सुनने के सर्वर पर कनेक्ट करने के लिए, आप मुझे प्रबुद्ध कर सकते हैं कृपया उपयोग करने के लिए नहीं मिलता है? – Marconi

+0

भी, क्या आपको कोई आइडिया है कि मैं इसे मानक के संयोजन के साथ कैसे उपयोग कर सकता हूं? कहें, जबकि सर्वर/क्लाइंट पृष्ठभूमि पर स्वीकार/कनेक्ट कर सकता है, मैं भी कमांड दर्ज करने में सक्षम होना चाहता हूं। – Marconi

+0

उपरोक्त कोड एक आउटगोइंग कनेक्शन बनाता है। लाइन में कनेक्ट टीसीपी यही है। आप जो चाहते हैं उससे अलग कैसे है? इसके अलावा, stdio के साथ इसका उपयोग करने के लिए, बस किसी बिंदु पर एक twisted.internet.stdio.StandardIO उदाहरण बनाएं। ListenTCP और कनेक्ट टीसीपी की तरह, यह एक इवेंट स्रोत है जिसे आप बना सकते हैं और ट्विस्ट से किसी अन्य ईवेंट स्रोत के साथ सह-अस्तित्व में हैं। –