आप आसानी से एक सर्वर शुरू कर सकते हैं और फिर परीक्षण मामले में इसका उपयोग कर सकते हैं। गीवेंट का own test suite ठीक है कि गीवेन्ट के built-in servers का परीक्षण करने के लिए।
उदाहरण के लिए:
class SimpleServer(gevent.server.StreamServer):
def handle(self, socket, address):
socket.sendall('hello and goodbye!')
class Test(unittest.TestCase):
def test(self):
server = SimpleServer(('127.0.0.1', 0))
server.start()
client = gevent.socket.create_connection(('127.0.0.1', server.server_port))
response = client.makefile().read()
assert response == 'hello and goodbye!'
server.stop()
बंदरगाह मूल्य के लिए 0
उपयोग करने का अर्थ सर्वर किसी भी उपलब्ध पोर्ट का उपयोग करेगा। सर्वर शुरू होने के बाद, bind
द्वारा चुना गया वास्तविक मूल्य विशेषता के रूप में उपलब्ध है।
StreamServer
का समर्थन करता है भी एसएसएल, निर्माता को keyfile
और certfile
तर्क गुजरती हैं और यह इसे अपने हैंडलर को पार करने से पहले SSLObject
के साथ प्रत्येक सॉकेट लपेट होगा।
आप StreamServer
उपयोग नहीं करते हैं और अपने सर्वर Greenlet पर आधारित है तो वास्तव में spawning यह आपको क्या करना चाहिए है। परीक्षण मामले के अंत में kill को मत भूलना।
एक सर्वर शुरू करना और एक ग्रीनलेट स्पॉइंग करना gevent में तेजी से संचालन है, जो एक नया धागा या प्रक्रिया बनाने से बहुत तेज़ है और आप प्रत्येक टेस्ट केस के लिए आसानी से एक नया सर्वर बना सकते हैं। जैसे ही आपको सर्वर की आवश्यकता नहीं है, बस सफाई करना न भूलें।
मुझे विश्वास है कि किसी भी gevent एपीआई का नकल करने की कोई आवश्यकता नहीं है, सर्वर के रूप में इसका उपयोग करना बहुत आसान है और ग्राहक खुशी से उसी प्रक्रिया में रह सकते हैं।
स्रोत
2010-10-29 04:45:00
यदि आपके पास कई परीक्षण हैं जो सभी एक सरल सर्वर बनाते हैं (ध्यान दें कि पोर्ट नंबर समान है) और इन परीक्षणों को समानांतर में चलाएं, तो आप या तो डेडलॉक्स या परीक्षण विफलताओं को प्राप्त करेंगे। – Sardathrion
मेरे उदाहरण में पोर्ट नंबर शून्य है, जिसका अर्थ है कि बाइंड() को एक मुफ्त बंदरगाह मिलेगा और इसका उपयोग करेगा। –
अगर यह एक अलग ग्रीनलेट में पैदा नहीं होता है तो यह कैसे प्रतिक्रिया करता है? क्या 'कनेक्ट' और 'पढ़ा' अंतर्निहित अवरोध है? हालांकि, हरे रंग के coroutines की सादगी और शक्ति के बारे में महान उदाहरण :) – schlamar