Go पर WebSocket: A से Z तक real-time एप्लिकेशन

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

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

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

Go पर WebSocket का परिचय: real-time क्यों?

\n\n

आधुनिक वेब एप्लिकेशनों को तेजी से डेटा डिलीवरी की आवश्यकता होती है। पारंपरिक HTTP अनुरोध/प्रतिक्रिया चैट, ऑनलाइन गेम, स्टॉक कोट्स और मॉनिटरिंग पैनल के कार्यों के लिए पर्याप्त नहीं है। यहाँ WebSocket मदद करता है — एक प्रोटोकॉल जो क्लाइंट और सर्वर के बीच स्थायी द्विदिश कनेक्शन प्रदान करता है। इस लेख में, हम सीखेंगे कि Go (Golang) पर WebSocket का उपयोग करके real-time एप्लिकेशन कैसे बनाएं, इंस्टॉलेशन से लेकर प्रोडक्शन समाधान तक।

\n\n

Go अपनी हल्की कंकरेंसी मॉडल (गोरूटीन) और उच्च प्रदर्शन के कारण WebSocket के लिए आदर्श है। हम एक साधारण इको सर्वर से लेकर पूर्ण चैट और मॉनिटरिंग सिस्टम तक का सफर तय करेंगे।

\n\n

WebSocket की मूल बातें और वातावरण सेटअप

\n\n

WebSocket क्या है?

\n

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

\n\n

इंस्टॉलेशन और लाइब्रेरीज़

\n

Go में WebSocket के लिए कोई मानक लाइब्रेरी नहीं है, लेकिन एक लोकप्रिय लाइब्रेरी gorilla/websocket है। इसे इंस्टॉल करें:

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

आप nhooyr.io/websocket (एक अधिक आधुनिक विकल्प) का भी उपयोग कर सकते हैं, लेकिन इस लेख में हम सबसे सामान्य gorilla पर ध्यान केंद्रित करेंगे।

\n\n

Go पर पहला WebSocket सर्वर

\n

हम एक सरल इको सर्वर लिखेंगे जो संदेश प्राप्त करता है और उसे वापस भेजता है:

\n
package main\n\nimport (\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 echoHandler(w http.ResponseWriter, r *http.Request) {\n    conn, err := upgrader.Upgrade(w, r, nil)\n    if err != nil {\n        log.Print("Upgrade:", err)\n        return\n    }\n    defer conn.Close()\n\n    for {\n        mt, message, err := conn.ReadMessage()\n        if err != nil {\n            log.Println("Read:", err)\n            break\n        }\n        log.Printf("Received: %s", message)\n        err = conn.WriteMessage(mt, message)\n        if err != nil {\n            log.Println("Write:", err)\n            break\n        }\n    }\n}\n\nfunc main() {\n    http.HandleFunc("/echo", echoHandler)\n    log.Println("Server started on :8080")\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}
\n\n

यह एक न्यूनतम कार्यशील उदाहरण है। Upgrader पर ध्यान दें — यह HTTP हेडर की जाँच करता है और कनेक्शन को स्विच करता है।

\n\n

real-time एप्लिकेशन की आर्किटेक्चर: Go पर चैट

\n\n

कनेक्शन प्रबंधन

\n

चैट के लिए कई क्लाइंट्स को प्रबंधित करना आवश्यक है। हम एक Hub संरचना बनाएंगे जो सभी सक्रिय कनेक्शनों को संग्रहीत करेगी और संदेशों को प्रसारित करेगी:

\n
type Client struct {\n    hub  *Hub\n    conn *websocket.Conn\n    send chan []byte\n}\n\ntype Hub struct {\n    clients    map[*Client]bool\n    broadcast  chan []byte\n    register   chan *Client\n    unregister chan *Client\n}\n\nfunc newHub() *Hub {\n    return &Hub{\n        clients:    make(map[*Client]bool),\n        broadcast:  make(chan []byte),\n        register:   make(chan *Client),\n        unregister: make(chan *Client),\n    }\n}\n\nfunc (h *Hub) run() {\n    for {\n        select {\n        case client := <-h.register:\n            h.clients[client] = true\n        case client := <-h.unregister:\n            if _, ok := h.clients[client]; ok {\n                delete(h.clients, client)\n                close(client.send)\n            }\n        case message := <-h.broadcast:\n            for client := range h.clients {\n                select {\n                case client.send <- message:\n                default:\n                

ब्लॉग

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