क्या आप रूबी में कस्टम नेटवर्क क्लाइंट और सर्वर बनाना चाहते हैं? या बस समझें कि यह कैसे काम करता है?
फिर आपको सॉकेट से निपटना होगा।
रूबी नेटवर्क प्रोग्रामिंग . के इस दौरे में मेरे साथ शामिल हों मूल बातें सीखने के लिए, और रूबी का उपयोग करके अन्य सर्वर और क्लाइंट से बात करना शुरू करें!
तो सॉकेट क्या हैं? ?
सॉकेट संचार चैनल के अंतिम बिंदु हैं, क्लाइंट और सर्वर दोनों संचार के लिए सॉकेट का उपयोग करते हैं।
उनके काम करने का तरीका बहुत आसान है :
एक बार कनेक्शन स्थापित हो जाने पर आप डेटा को अपने सॉकेट में डाल सकते हैं और यह दूसरे छोर पर पहुंच जाएगा, जहां रिसीवर आने वाले डेटा को संसाधित करने के लिए सॉकेट से पढ़ेगा।
सॉकेट प्रकार
आपके लिए कुछ प्रकार के सॉकेट उपलब्ध हैं, सबसे सामान्य — टीसीपी सॉकेट — आपको टीसीपी-आधारित सेवाओं जैसे HTTP या एफ़टीपी से कनेक्शन बनाने की अनुमति देगा।
यदि आपको यूडीपी आधारित प्रोटोकॉल का उपयोग करना है तो आप यूडीपी सॉकेट का उपयोग कर सकते हैं।
अन्य प्रकार के सॉकेट थोड़े अधिक गूढ़ होते हैं, यूनिक्स सॉकेट पूर्ण टीसीपी कनेक्शन के ओवरहेड के बिना यूनिक्स सिस्टम में आईपीसी (इंटर-प्रोसेस कम्युनिकेशन) की अनुमति देते हैं।
रूबी में सॉकेट का उपयोग करना
अब जब हम जानते हैं कि सॉकेट हमारे लिए क्या कर सकते हैं, तो उनका उपयोग शुरू करने का समय आ गया है।
सबसे पहले, अपने प्रोग्राम में सॉकेट लाइब्रेरी की आवश्यकता है:
require 'socket'
TCP सॉकेट बनाने के लिए आप TCPSocket . का उपयोग कर सकते हैं वर्ग, पैरामीटर के रूप में आपको गंतव्य आईपी पते और पोर्ट की आवश्यकता होगी।
यह एक कनेक्शन स्थापित करने का प्रयास करेगा, यदि इसे स्थापित नहीं किया जा सकता है तो आपको एक Errno::ECONNREFUSED मिलेगा त्रुटि।
socket = TCPSocket.new('google.com', 80)
अब आपको अपने सॉकेट के माध्यम से संदेश भेजने में सक्षम होना चाहिए, आपको उस प्रोटोकॉल का पालन करना होगा जिससे आप संचार कर रहे हैं ताकि दूसरे छोर आपको समझ सकें।
socket.write "GET / HTTP/1.1" socket.write "\r\n\r\n"
आपके द्वारा उपयोग की जाने वाली कई विधियाँ TCPSocket
. के मूल वर्ग से आती हैं ।
सर्वर से प्रतिक्रिया पढ़ने के लिए आप आरईवी विधि का उपयोग कर सकते हैं।
आपको सॉकेट से एक पैरामीटर के रूप में पढ़ने के लिए बाइट्स की संख्या पास करनी होगी:
puts socket.recv(100)
एक छोटी सी समस्या है, हो सकता है कि आपको कोई डेटा वापस न मिले और आपका ऐप कुछ नहीं करता दिखाई देगा।
इसका कारण यह है कि यदि पढ़ने के लिए पर्याप्त डेटा नहीं है, तो आपका प्रोग्राम 'ब्लॉक' हो जाएगा।
इसका अर्थ है यह तब तक प्रतीक्षा करेगा जब तक कि कुछ डेटा उपलब्ध न हो या सर्वर कनेक्शन बंद न कर दे ।
आप जिस प्रोटोकॉल के साथ काम कर रहे हैं, उसके आधार पर आप पढ़ रहे डेटा की मात्रा को बढ़ाना या घटाना चाह सकते हैं।
अगर ब्लॉक करना आपके लिए एक समस्या है, तो IO क्लास से readpartial और read_nonblock मेथड देखें।
TCP सर्वर कैसे लिखें
चलो एक सर्वर बनाते हैं! प्रक्रिया क्लाइंट को लिखने के समान है, लेकिन हमें सॉकेट को बाइंड . करने के लिए कहना होगा एक इंटरफ़ेस के लिए, फिर सुनो उस पर, और अंत में स्वीकार करें आने वाले कनेक्शन।
TCPServer वर्ग हमारे लिए पहले दो पहले से ही करता है।
यहां एक उदाहरण दिया गया है :
require 'socket' socket = TCPServer.new('0.0.0.0', 8080) client = socket.accept puts "New client! #{client}" client.write("Hello from server") client.close
हमारा उदाहरण सर्वर पोर्ट 8080 पर सुन रहा होगा और एक कनेक्टिंग क्लाइंट को संदेश के साथ बधाई देगा।
ध्यान दें कि कैसे हम केवल एक ग्राहक को स्वीकार कर सकते हैं और कार्यक्रम समाप्त हो जाएगा।
एकाधिक ग्राहकों को स्वीकार करना
कई क्लाइंट को स्वीकार करने और उनका जवाब देने में सक्षम होने के लिए, हमें एक लूप और कुछ थ्रेड्स की आवश्यकता होगी।
उदाहरण :
require 'socket' PORT = 8081 socket = TCPServer.new('0.0.0.0', PORT) def handle_connection(client) puts "New client! #{client}" client.write("Hello from server") client.close end puts "Listening on #{PORT}. Press CTRL+C to cancel." loop do client = socket.accept Thread.new { handle_connection(client) } end
उसे एक नया सर्वर शुरू करना चाहिए जो तब तक सुनता रहता है जब तक आप उसे रोक नहीं देते।
यदि आप यह सीखना चाहते हैं कि इसे अगले स्तर पर कैसे ले जाया जाए और रूबी में वेब सर्वर लिखना है तो इस ब्लॉग पोस्ट को पढ़ें।
निष्कर्ष
आपने सीखा कि टीसीपी सॉकेट क्या हैं, वे कैसे काम करते हैं और आप कुछ रूबी कक्षाओं जैसे TCPServer
का उपयोग कैसे कर सकते हैं &TCPSocket
रूबी एप्लिकेशन बनाने के लिए जो इंटरनेट पर अन्य मशीनों के साथ इंटरैक्ट कर सकते हैं।
रूबी नेटवर्क प्रोग्रामिंग के साथ खेलना मजेदार है!
अब जाओ कुछ अच्छा बनाएं और इसे सभी के साथ साझा करें टिप्पणी अनुभाग में 🙂
अगर आप अपने रूबी कौशल में सुधार जारी रखना चाहते हैं तो मेरे न्यूज़लेटर में शामिल होना न भूलें!