Cosocket और नॉन-ब्लॉकिंग TCP
content_by_lua में एसिंक्रोनस बैकएंड कनेक्शन के लिए ngx.socket.tcp का उपयोग करें।
Cosocket और नॉन-ब्लॉकिंग TCP, CoddyKit पर Lua Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Lua Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कॉसॉकेट क्या हैं
OpenResty के कॉसॉकेट अवरोध-रहित TCP/UDP सॉकेट हैं, जो Nginx के इवेंट लूप के साथ एकीकृत होते हैं। डेटा की प्रतीक्षा करते समय वे कॉरूटीन को रोक देते हैं, जिससे वर्कर अन्य अनुरोध संभालने के लिए मुक्त हो जाता है।
TCP कॉसॉकेट बनाना
कॉसॉकेट बनाने के लिए ngx.socket.tcp() का उपयोग करें। कनेक्ट करना, भेजना और प्राप्त करना—इनपुट/आउटपुट के अवरुद्ध होने की स्थिति में—सभी अपने-आप कॉरूटीन को रोक देते हैं।
-- content_by_lua_block
local sock = ngx.socket.tcp()
local ok, err = sock:connect("redis.local", 6379)
if not ok then
ngx.log(ngx.ERR, "Connect failed: ", err)
return ngx.exit(500)
endडेटा भेजना
sock:send(data) एक स्ट्रिंग भेजता है। यह भेजे गए बाइट लौटाता है या विफलता पर nil + त्रुटि लौटाता है।
local bytes, err = sock:send("PING\r\n")
if not bytes then
ngx.log(ngx.ERR, "Send error: ", err)
endडेटा प्राप्त करना
sock:receive(pattern) डेटा पढ़ता है। पैटर्न: "*l" एक पंक्ति पढ़ता है, "*a" कनेक्शन बंद होने तक सब कुछ पढ़ता है, और कोई संख्या ठीक N बाइट पढ़ती है।
local data, err = sock:receive("*l")
if not data then
ngx.log(ngx.ERR, "Receive error: ", err)
return ngx.exit(500)
end
ngx.say("Response: " .. data)टाइमआउट सेट करना
अटकने से बचने के लिए कनेक्ट, भेजने और प्राप्त करने के टाइमआउट सेट करें।
sock:settimeout(1000) -- 1 second timeout
-- or separate timeouts:
sock:settimeouts(1000, 5000, 5000) -- connect, send, receive (ms)कनेक्शन पूल
sock:setkeepalive(timeout, pool_size) सॉकेट को दोबारा उपयोग के लिए पूल में वापस रखता है। Redis/MySQL के प्रदर्शन के लिए यह अत्यंत महत्वपूर्ण है।
sock:setkeepalive(60000, 100) -- 60s timeout, pool size 100HTTP अनुरोध करना
कॉसॉकेट का उपयोग करके एक सरल HTTP/1.0 GET अनुरोध लागू करें।
local function httpGet(host, path)
local sock = ngx.socket.tcp()
sock:connect(host, 80)
sock:send("GET " .. path .. " HTTP/1.0\r\nHost: " .. host .. "\r\n\r\n")
local resp = sock:receive("*a")
sock:close()
return resp
endUDP कॉसॉकेट
ngx.socket.udp() एक UDP कॉसॉकेट बनाता है। यह statsd मेट्रिक रिपोर्ट करने के लिए उपयोगी है।
local udp = ngx.socket.udp()
udp:setpeername("statsd.local", 8125)
udp:send("requests:1|c")त्रुटि संभालने का पैटर्न
सभी कॉसॉकेट विधियाँ Lua के नियम का पालन करती हैं: विफलता पर nil + त्रुटि स्ट्रिंग। दोनों लौटाए गए मानों की हमेशा जाँच करें।
कॉसॉकेट की सीमाएँ
कॉसॉकेट इन जगहों पर उपयोग नहीं किए जा सकते: init_by_lua, set_by_lua, header_filter_by_lua। इनका उपयोग केवल content, access और rewrite चरणों में करें।
प्रदर्शन तुलना
कॉसॉकेट सीधे Nginx की इनपुट/आउटपुट प्रणाली का उपयोग करते हैं, इसलिए इनका थ्रूपुट कच्चे epoll-आधारित C कोड के समान होता है। किसी अतिरिक्त थ्रेड या प्रक्रिया का ओवरहेड नहीं होता।
कॉसॉकेट प्रश्न
जब कोई कॉसॉकेट धीमे सर्वर से डेटा की प्रतीक्षा कर रहा होता है, तब क्या होता है?
पुनरावलोकन: कॉसॉकेट और अवरोध-रहित TCP
OpenResty के कॉसॉकेट अवरोध-रहित TCP/UDP सुविधा प्रदान करते हैं और इनपुट/आउटपुट के दौरान कॉरूटीन को रोक देते हैं, जिससे उच्च समवर्तीता संभव होती है। कनेक्शन पूलिंग के लिए setkeepalive का उपयोग करें। अटकने से बचने के लिए टाइमआउट सेट करें। ये केवल content/access/rewrite चरणों में उपलब्ध हैं।
एआई शिक्षक के साथ Lua सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 40
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “Cosocket और नॉन-ब्लॉकिंग TCP” पाठ निःशुल्क है?
हाँ — Lua Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Cosocket और नॉन-ब्लॉकिंग TCP” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Lua Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Cosocket और नॉन-ब्लॉकिंग TCP” में मैं क्या सीखूँगा?
content_by_lua में एसिंक्रोनस बैकएंड कनेक्शन के लिए ngx.socket.tcp का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Lua Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Lua Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Lua Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Cosocket और नॉन-ब्लॉकिंग TCP” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Lua Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Lua Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- OpenResty आर्किटेक्चर
- Lua में HTTP अनुरोध संभालना
- Cosocket और नॉन-ब्लॉकिंग TCP
- साझा मेमोरी डिक्शनरी