2013-04-18 4 views
5

डिस्कनेक्ट कर दिया गया मैं इस तरह एक सर्वर करने के लिए अपने कनेक्शन बनाने: किसी अन्य विधि है, जहां मैं इस प्रोटोकॉल वस्तु पर एक संभाल में अबमैं इसकी जांच कैसे करते हैं कि कोई twisted.internet.protocol उदाहरण

connection = TCP4ClientEndPoint(reactor, server_host, server_port) 
factory = Factory() 
factory.protocol = Protocol 
protocol = yield connection.connect(factory) 
protocol.doSomething()  # returns a deferred 

, मैं परीक्षण करना चाहता हूं कि प्रोटोकॉल अभी भी जुड़ा हुआ है, जैसे कुछ:

if protocol.isConnected(): 
    doSomethingElse() 

क्या ऐसा करने का कोई तरीका है। मैंने मुड़ दस्तावेज को देखा और एक प्रासंगिक विधि नहीं मिल सका। कनेक्शन में ध्वज सेट करना लॉस्ट() कॉलबैक एक विकल्प है, लेकिन मैं सोच रहा था कि क्या मैं ऐसा करने से बच सकता हूं।

उत्तर

6

घुमावदार राज्य की स्थिति में जितना संभव हो सके उतना प्रकाश जितना संभव हो सके। जैसे ही नंगे कारखानों को अपने बच्चों का बिल्कुल कोई ट्रैक नहीं रहता है, Protocols अपने बारे में बहुत कम जानते हैं। वे ज्यादातर कॉलबैक बैग हैं।

connectionLost() विधि में ध्वज सेट करना ऐसा करने का तरीका है।

from twisted.internet.protocol import Protocol 

class StatefulProtocol(Protocol): 
    def __init__(self, factory): 
     self.connected = False 

    def connectionMade(self): 
     self.connected = True 

    def connectionLost(self, reason): 
     self.connected = False 

संपादित: भविष्य में संदर्भ के लिए ध्यान दें कि एक कारण यह असहज महसूस करता है कि। यदि आपके पास ऐसी कोई विधि है जिसे इस प्रश्न से पूछने की आवश्यकता है, तो आप शायद कॉलबैक श्रृंखला के बाहर काम कर रहे हैं। यदि आप Protocol द्वारा उजागर जीवन चक्र विधियों के भीतर विशेष रूप से कोड चला रहे थे, तो आपको इसकी आवश्यकता नहीं हो सकती है।

+0

धन्यवाद! मैं मोड़ के साथ डिजाइन प्रथाओं से बहुत परिचित नहीं हूँ। जीवन चक्र विधियों से, क्या आपका मतलब है कि मुझे कनेक्शन में अपना पूरा काम करना चाहिए() कॉलबैक, और कभी भी प्रोटोकॉल की तरह कुछ स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है। कुछ()? – AnkurVj

+1

हां। कॉलबैक विधियों से सभी आवश्यक व्यवहार चलाकर, आप ट्रैकिंग स्थिति की आवश्यकता से बचते हैं (जो आमतौर पर त्रुटि-प्रवण होता है) क्योंकि जब आप इसे करने की ज़रूरत होती है तो आप केवल सामान करते हैं। ध्यान दें कि यह ** वांछनीय ** है, लेकिन हमेशा ** संभव नहीं **। कुछ डिज़ाइनों को उपरोक्त की तरह झंडे की आवश्यकता होती है। इसे टालने का प्रयास करें, लेकिन सर्वोत्तम अभ्यास का पालन करने के प्रयास में अपने कोडबेस को बर्बाद न करें :) – slezica

+0

दरअसल। मुझे कॉलबैक में यह सब करना मुश्किल था! उदाहरण के लिए मुझे प्रोटोकॉल ऑब्जेक्ट को कनेक्ट करने के बाद कुछ अतिरिक्त चर देना था और इससे पहले कि यह कुछ भी हो, लेकिन यह नहीं पता था कि यह कैसे करें! मुझे 'प्रोटोकॉल.वल = वैल' करना था और फिर स्पष्ट रूप से 'self.do कुछ()' करने के बजाय 'connection.do कुछ() 'को' कनेक्शन मेडे()' कॉलबैक – AnkurVj

संबंधित मुद्दे