近年、WebSocket テクノロジーは Web 開発に不可欠な要素となっています。 WebSocket は、単一の TCP 接続を介した全二重通信用のプロトコルであり、クライアントとサーバー間の通信をよりスムーズかつ効率的にします。現在、リアルタイム チャット、オンライン ゲーム、リアルタイム データ視覚化など、多くの最新の Web アプリケーションで WebSocket テクノロジが使用されています。
Go 言語は、最新のプログラミング言語として、WebSocket テクノロジを適切にサポートします。この記事では、Go で WebSocket テクノロジーを使用する方法について詳しく説明します。
WebSocket プロトコルは HTTP アップグレード プロトコルから派生したものであるため、Go 言語で WebSocket を使用するには、WebSocket を HTTP プロトコルと組み合わせる必要もあります。 Go 言語には、HTTP 関連のさまざまな機能を提供する net/http
パッケージが組み込まれています。 Go で WebSocket を使用したい場合は、net/http
および github.com/gorilla/websocket
ライブラリをインポートするだけです。
次に、github.com/gorilla/websocket
ライブラリを使用して WebSocket を実装する方法を見てみましょう。
Go 言語では、WebSocket サーバーを作成する方法は比較的簡単です。 HTTP サーバーを作成し、クライアントの WebSocket 接続を待機する方法を示す次のコードを直接見てみましょう。
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func main() { http.HandleFunc("/ws", handleWebSocket) http.ListenAndServe(":8080", nil) } func handleWebSocket(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println(err) return } defer conn.Close() for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println(err) return } log.Printf("Received message: %s ", message) err = conn.WriteMessage(messageType, message) if err != nil { log.Println(err) return } log.Printf("Sent message: %s ", message) } }
上記のコードでは、最初に websocket.Upgrader
オブジェクトを作成します。 , 受信 HTTP 接続を WebSocket 接続にアップグレードする役割を果たします。次に、クライアントの接続時に呼び出される handleWebSocket
関数を作成しました。この関数は、まず受信 HTTP 接続を WebSocket 接続にアップグレードし、次にループに入り、クライアントから継続的に情報を受信し、受信した情報をクライアントに返します。このうち、conn.ReadMessage()
と conn.WriteMessage()
は、それぞれ情報の読み取りと書き込みに使用されます。
最後に、handleWebSocket
関数を /ws
ルートにバインドし、HTTP サーバーを起動して、クライアントが WebSocket サーバーに接続できるようにします。すべてがうまくいった場合、上記のコードを開始すると、次のような出力が表示されます。
2021/10/13 15:20:06 http: Server started at http://127.0.0.1:8080
これは、WebSocket サーバーが正常に作成され、クライアントが ws:/ を使用できることを意味します。 / localhost:8080/ws
サーバーに接続するためのアドレス。
WebSocket サーバーの作成と同様に、WebSocket クライアントも Go 言語で簡単に作成できます。 WebSocket サーバーとの接続を確立するクライアントを作成する方法を説明する次のコードを見てみましょう。
package main import ( "fmt" "log" "net/url" "os" "os/signal" "syscall" "github.com/gorilla/websocket" ) func main() { interrupt := make(chan os.Signal, 1) signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM) u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/ws"} log.Printf("Connecting to %s", u.String()) conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal("dial:", err) } defer conn.Close() done := make(chan struct{}) go func() { defer close(done) for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("read:", err) return } log.Printf("Received message: %s ", message) if err := conn.WriteMessage(messageType, message); err != nil { log.Println("write:", err) return } log.Printf("Sent message: %s ", message) } }() for { select { case <-done: return case <-interrupt: log.Println("interrupt") if err := conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")); err != nil { log.Println("write close:", err) return } select { case <-done: case <-time.After(time.Second): } return } } }
上記のコードでは、websocket.Dial
メソッドを使用して通信します。 WebSocket を使用すると、サーバーは接続を確立します。接続が確立されると、無限ループに入り、WebSocket サーバーと常に情報を送受信します。このうち、conn.ReadMessage()
と conn.WriteMessage()
は、情報の読み取りと書き込みに使用されます。
上記のコードでは、channels
を使用して操作が完了するのを待っていることに注意してください。 interrupt
シグナルを受信した場合、websocket.CloseMessage
メッセージをサーバーに送信して、WebSocket 接続を閉じます。
この記事では、github.com/gorilla/websocket
ライブラリを使用して Go 言語で WebSocket を実装する方法を学びました。 WebSocket テクノロジーを使用すると、Web アプリケーションにダイナミクスとインタラクションをさらに追加でき、アプリケーションをより最新でユーザーフレンドリーにすることができます。
WebSocket テクノロジおよびそれを Go 言語で使用する方法についてご質問やコメントがある場合は、以下にメッセージを残してご意見をお聞かせください。
以上がGo で WebSocket を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。