Go और WebSockets real-time के लिए आदर्श जोड़ी क्यों हैं?
\n\nएक स्थिति की कल्पना करें: आप एक ऑनलाइन चैट, स्टॉक टर्मिनल या मल्टीप्लेयर गेम चला रहे हैं। उपयोगकर्ता तत्काल प्रतिक्रिया की उम्मीद करते हैं। कोई भी मैन्युअल रूप से पेज को रिफ्रेश नहीं करना चाहता या सर्वर से प्रतिक्रिया आने के लिए 5 सेकंड इंतजार नहीं करना चाहता। यहाँ WebSockets मंच पर आते हैं।
\n\nGo (Golang) इस कार्य के लिए एकदम सही है। इसके हल्के गोरूटीन (goroutines) प्रदर्शन में गिरावट के बिना हजारों समवर्ती कनेक्शन बनाए रखने की अनुमति देते हैं। और मानक लाइब्रेरी net/http gorilla/websocket पैकेज के साथ मिलकर real-time एप्लिकेशन लिखने को एक शुद्ध आनंद में बदल देती है।
इस लेख में, हम समझेंगे कि Go में WebSocket कैसे काम करता है, एक सरल चैट लिखेंगे और best practices पर चर्चा करेंगे। चलिए शुरू करते हैं!
\n\nWebSocket क्या है और यह HTTP से बेहतर क्यों है?
\n\nसंक्षेप में - WebSocket एक प्रोटोकॉल है जो क्लाइंट (ब्राउज़र) और सर्वर के बीच एक स्थायी द्विदिश कनेक्शन स्थापित करता है। पारंपरिक HTTP के विपरीत, जहां क्लाइंट हमेशा अनुरोध शुरू करता है, WebSocket सर्वर को किसी भी समय क्लाइंट को डेटा भेजने की अनुमति देता है।
\n\nलाभ स्पष्ट हैं:
\n- \n
- तत्काल वितरण - नया कनेक्शन स्थापित करने में कोई देरी नहीं। \n
- कम ट्रैफ़िक - हेडर केवल एक बार हैंडशेक के दौरान भेजे जाते हैं। \n
- दक्षता - हजारों HTTP अनुरोधों के बजाय एक कनेक्शन। \n
Go इन कनेक्शनों के प्रबंधन में उत्कृष्ट है। OS थ्रेड्स (जो महंगे हैं) बनाने के बजाय, Go गोरूटीन का उपयोग करता है। एक गोरूटीन - एक कनेक्शन। हजारों गोरूटीन कुछ OS थ्रेड्स पर काम करते हैं, न्यूनतम मेमोरी की खपत करते हैं।
\n\nGo प्रोजेक्ट की स्थापना और तैयारी
\n\nमान लें कि आपके पास Go पहले से इंस्टॉल है। यदि नहीं - brew install go या golang.org से डाउनलोड करें।
एक नया मॉड्यूल बनाएँ:
\n\nmkdir go-websocket-chat\ncd go-websocket-chat\ngo mod init go-websocket-chat\n\nअब सबसे लोकप्रिय लाइब्रेरी gorilla/websocket इंस्टॉल करें:
go get github.com/gorilla/websocket\n\nहो गया। अब हमारे पास Go में real-time एप्लिकेशन बनाने के लिए सब कुछ है।
\n\nGo पर WebSocket सर्वर लिखना
\n\nसबसे सरल चीज़ से शुरू करते हैं - एक इको सर्वर। क्लाइंट एक संदेश भेजता है, सर्वर उसे वापस कर देता है। इससे बुनियादी यांत्रिकी को समझने में मदद मिलेगी।
\n\nचरण 1: संरचना और कनेक्शन का अपग्रेड
\n\nWebSocket कनेक्शन एक HTTP अनुरोध (हैंडशेक) से शुरू होता है। सर्वर को इसे WebSocket में "अपग्रेड" करना होता है। Go में यह http.Hijacker या gorilla/websocket पैकेज से सुविधाजनक Upgrader विधि के माध्यम से किया जाता है।
एक फ़ाइल main.go बनाएँ:
package main\n\nimport (\n "fmt"\n "log"\n "net/http"\n "github.com/gorilla/websocket"\n)\n\nvar upgrader = websocket.Upgrader{\n CheckOrigin: func(r *http.Request) bool {\n return true // किसी भी स्रोत की अनुमति दें (डेवलपमेंट के लिए)\n },\n}\n\nfunc handleWebSocket(w http.ResponseWriter, r *http.Request) {\n conn, err := upgrader.Upgrade(w, r, nil)\n if err != nil {\n log.Print("अपग्रेड त्रुटि:", err)\n return\n }\n defer conn.Close()\n\n // पढ़ने और लिखने का अनंत लूप\n for {\n messageType, message, err := conn.ReadMessage()\n if err != nil {\n log.Println("पढ़ने में त्रुटि:", err)\n break\n }\n log.Printf("प्राप्त: %s", message)\n\n // वही वापस भेजें\n err = conn.WriteMessage(messageType, message)\n if err != nil {\n log.Println("लिखने में त्रुटि:", err)\n break\n }\n }\n}\n\nfunc main() {\n http.HandleFunc("/ws", handleWebSocket)\n fmt.Println("सर्वर :8080 पर शुरू हुआ")\n log.Fatal(http.ListenAndServe(":8080", nil))\n}\n\nचलाएँ: go run main.go