Go में WebSocket: gorilla/websocket लाइब्रेरी और मानक कार्यान्वयन

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

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

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

Go (Golang) WebSocket लाइब्रेरी: gorilla/websocket और मानक net/http

\n\n

WebSocket एक प्रोटोकॉल है जो एकल लंबे समय तक चलने वाले TCP कनेक्शन पर क्लाइंट और सर्वर के बीच पूर्ण-द्वैध संचार प्रदान करता है। क्लासिक HTTP के विपरीत, कनेक्शन स्थापित होने के बाद, क्लाइंट से लगातार अनुरोधों के बिना, किसी भी समय डेटा दोनों दिशाओं में प्रेषित किया जा सकता है। यह चैट, रियल-टाइम सूचनाओं, ऑनलाइन गेम और ट्रेडिंग प्लेटफॉर्म के लिए एक आदर्श समाधान है।

\n\n

Go (Golang) इकोसिस्टम में WebSocket के साथ काम करने के कई तरीके हैं। सबसे लोकप्रिय और समय-परीक्षित लाइब्रेरी gorilla/websocket है। हालाँकि, Go 1.22 से शुरू होकर, मानक net/http पैकेज का उपयोग करके, तीसरे पक्ष की निर्भरता के बिना एक बुनियादी WebSocket सर्वर को लागू करना संभव हो गया है। इस लेख में, हम दोनों दृष्टिकोणों पर विस्तार से चर्चा करेंगे।

\n\n

gorilla/websocket लाइब्रेरी की स्थापना

\n\n

gorilla/websocket के साथ काम शुरू करने के लिए, इसे go get के माध्यम से स्थापित करें:

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

लाइब्रेरी सर्वर और क्लाइंट दोनों पक्षों को बनाने के लिए एक सुविधाजनक API प्रदान करती है। यह हैंडशेक, संदेश फ्रेमिंग को संभालती है, संपीड़न और स्वचालित पिंग/पोंग का समर्थन करती है।

\n\n

gorilla/websocket पर WebSocket सर्वर

\n\n

एक सरल इको सर्वर का उदाहरण देखें। क्लाइंट एक संदेश भेजता है, सर्वर उसे वापस भेजता है:

\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 failed:", err)\n        return\n    }\n    defer conn.Close()\n\n    for {\n        messageType, message, err := conn.ReadMessage()\n        if err != nil {\n            log.Println("Read error:", err)\n            break\n        }\n        log.Printf("Received: %s", message)\n\n        if err := conn.WriteMessage(messageType, message); err != nil {\n            log.Println("Write error:", err)\n            break\n        }\n    }\n}\n\nfunc main() {\n    http.HandleFunc("/echo", echoHandler)\n    log.Fatal(http.ListenAndServe(":8080", nil))\n}
\n\n

यहाँ Upgrader एक सामान्य HTTP अनुरोध को WebSocket कनेक्शन में बदल देता है। CheckOrigin फ़ंक्शन नियंत्रित करता है कि किन डोमेन से कनेक्शन की अनुमति है। उत्पादन में, विशिष्ट स्रोतों की जाँच करने की अनुशंसा की जाती है।

\n\n

gorilla/websocket पर WebSocket क्लाइंट

\n\n

एक क्लाइंट का उदाहरण जो हमारे सर्वर से जुड़ता है और एक संदेश भेजता है:

\n\n
package main\n\nimport (\n    "log"\n    "os"\n    "os/signal"\n    "time"\n    "github.com/gorilla/websocket"\n)\n\nfunc main() {\n    interrupt := make(chan os.Signal, 1)\n    signal.Notify(interrupt, os.Interrupt)\n\n    url := "ws://localhost:8080/echo"\n    c, _, err := websocket.DefaultDialer.Dial(url, nil)\n    if err != nil {\n        log.Fatal("dial:", err)\n    }\n    defer c.Close()\n\n    done := make(chan struct{})\n\n    // उत्तर पढ़ने के लिए गोरूटीन\n    go func() {\n        defer close(done)\n        for {\n            _, message, err := c.ReadMessage()\n            if err != nil {\n                log.Println("read:", err)\n                return\n            }\n            log.Printf("recv: %s", message)\n        }\n    }()\n\n    // संदेश भेजना\n    ticker := time.NewTicker(time.Second)\n    defer ticker.Stop()\n\n    for {\n        select {\n        case <-done:\n            return\n        case t := <-ticker.C:\n            err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))\n            if err != nil {\n                log.Println("write:", err)\n                return\n            }\n        case <-interrupt:\n            log                    

अनुशंसाएँ