Go में WebSockets: शुरुआत से real-time एप्लिकेशन लिखना

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go और WebSockets real-time के लिए आदर्श जोड़ी क्यों हैं?

\n\n

एक स्थिति की कल्पना करें: आप एक ऑनलाइन चैट, स्टॉक टर्मिनल या मल्टीप्लेयर गेम चला रहे हैं। उपयोगकर्ता तत्काल प्रतिक्रिया की उम्मीद करते हैं। कोई भी मैन्युअल रूप से पेज को रिफ्रेश नहीं करना चाहता या सर्वर से प्रतिक्रिया आने के लिए 5 सेकंड इंतजार नहीं करना चाहता। यहाँ WebSockets मंच पर आते हैं।

\n\n

Go (Golang) इस कार्य के लिए एकदम सही है। इसके हल्के गोरूटीन (goroutines) प्रदर्शन में गिरावट के बिना हजारों समवर्ती कनेक्शन बनाए रखने की अनुमति देते हैं। और मानक लाइब्रेरी net/http gorilla/websocket पैकेज के साथ मिलकर real-time एप्लिकेशन लिखने को एक शुद्ध आनंद में बदल देती है।

\n\n

इस लेख में, हम समझेंगे कि Go में WebSocket कैसे काम करता है, एक सरल चैट लिखेंगे और best practices पर चर्चा करेंगे। चलिए शुरू करते हैं!

\n\n

WebSocket क्या है और यह HTTP से बेहतर क्यों है?

\n\n

संक्षेप में - WebSocket एक प्रोटोकॉल है जो क्लाइंट (ब्राउज़र) और सर्वर के बीच एक स्थायी द्विदिश कनेक्शन स्थापित करता है। पारंपरिक HTTP के विपरीत, जहां क्लाइंट हमेशा अनुरोध शुरू करता है, WebSocket सर्वर को किसी भी समय क्लाइंट को डेटा भेजने की अनुमति देता है।

\n\n

लाभ स्पष्ट हैं:

\n
    \n
  • तत्काल वितरण - नया कनेक्शन स्थापित करने में कोई देरी नहीं।
  • \n
  • कम ट्रैफ़िक - हेडर केवल एक बार हैंडशेक के दौरान भेजे जाते हैं।
  • \n
  • दक्षता - हजारों HTTP अनुरोधों के बजाय एक कनेक्शन।
  • \n
\n\n

Go इन कनेक्शनों के प्रबंधन में उत्कृष्ट है। OS थ्रेड्स (जो महंगे हैं) बनाने के बजाय, Go गोरूटीन का उपयोग करता है। एक गोरूटीन - एक कनेक्शन। हजारों गोरूटीन कुछ OS थ्रेड्स पर काम करते हैं, न्यूनतम मेमोरी की खपत करते हैं।

\n\n

Go प्रोजेक्ट की स्थापना और तैयारी

\n\n

मान लें कि आपके पास Go पहले से इंस्टॉल है। यदि नहीं - brew install go या golang.org से डाउनलोड करें।

\n\n

एक नया मॉड्यूल बनाएँ:

\n\n
mkdir go-websocket-chat\ncd go-websocket-chat\ngo mod init go-websocket-chat
\n\n

अब सबसे लोकप्रिय लाइब्रेरी gorilla/websocket इंस्टॉल करें:

\n\n
go get github.com/gorilla/websocket
\n\n

हो गया। अब हमारे पास Go में real-time एप्लिकेशन बनाने के लिए सब कुछ है।

\n\n

Go पर WebSocket सर्वर लिखना

\n\n

सबसे सरल चीज़ से शुरू करते हैं - एक इको सर्वर। क्लाइंट एक संदेश भेजता है, सर्वर उसे वापस कर देता है। इससे बुनियादी यांत्रिकी को समझने में मदद मिलेगी।

\n\n

चरण 1: संरचना और कनेक्शन का अपग्रेड

\n\n

WebSocket कनेक्शन एक HTTP अनुरोध (हैंडशेक) से शुरू होता है। सर्वर को इसे WebSocket में "अपग्रेड" करना होता है। Go में यह http.Hijacker या gorilla/websocket पैकेज से सुविधाजनक Upgrader विधि के माध्यम से किया जाता है।

\n\n

एक फ़ाइल main.go बनाएँ:

\n\n
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

ब्लॉग

पुस्तक अनुशंसाएँ