ホームページ >バックエンド開発 >Golang >Go言語でネットワークプログラミング機能を学び、WebSocket通信を実装する

Go言語でネットワークプログラミング機能を学び、WebSocket通信を実装する

WBOY
WBOYオリジナル
2023-07-29 17:37:221417ブラウズ

Go 言語でネットワーク プログラミング機能を学び、WebSocket 通信を実装する

はじめに
Go 言語は強力なプログラミング言語として、ネットワーク プログラミングの分野で広く使用されています。豊富なネットワークプログラミング機能とライブラリを提供しており、開発者はさまざまなネットワーク通信機能を簡単に実装できます。この記事では、Go 言語で一般的に使用されるネットワーク プログラミング関数をいくつか紹介し、WebSocket 通信を実装するための例を組み合わせます。

1. ネットワーク プログラミング関数

  1. net.Listen
    関数シグネチャ: func Listen(ネットワーク, アドレス文字列) (リスナー, エラー)
    目的:指定されたネットワーク アドレスをリッスンし、Listener オブジェクトを返します。
    例:

    listener, err := net.Listen("tcp", "127.0.0.1:8080")
    if err != nil {
     log.Fatal(err)
    }
    defer listener.Close()
  2. Accept
    関数シグネチャ: func (l *TCPListener) Accept() (Conn, error)
    目的: 接続リクエストを受け入れ、Conn オブジェクトを返す
    例:

    conn, err := listener.Accept()
    if err != nil {
     log.Fatal(err)
    }
    defer conn.Close()
  3. WebSocket プロトコル
    WebSocket は、単一の TCP 接続での全二重通信用のプロトコルです。クライアントとサーバー間のリアルタイム通信。 Go 言語は、WebSocket 通信機能を簡単に実装するための gorilla/websocket ライブラリを提供します。

2. WebSocket 通信の実装

  1. インストール gorilla/websocketLibrary
    コマンド ラインで次のコマンドを実行します。

    go get -u github.com/gorilla/websocket
  2. サーバー側のコード

    package main
    
    import (
     "log"
     "net/http"
    
     "github.com/gorilla/websocket"
    )
    
    var upgrader = websocket.Upgrader{
     ReadBufferSize:  1024,
     WriteBufferSize: 1024,
    }
    
    func websocketHandler(w http.ResponseWriter, r *http.Request) {
     conn, err := upgrader.Upgrade(w, r, nil)
     if err != nil {
         log.Fatal(err)
     }
     defer conn.Close()
    
     for {
         messageType, message, err := conn.ReadMessage()
         if err != nil {
             log.Println(err)
             break
         }
         log.Printf("Received message: %s
    ", message)
    
         if err := conn.WriteMessage(messageType, message); err != nil {
             log.Println(err)
             break
         }
     }
    }
    
    func main() {
     http.HandleFunc("/websocket", websocketHandler)
     log.Fatal(http.ListenAndServe(":8080", nil))
    }
  3. クライアント側のコード

    package main
    
    import (
     "log"
     "net/url"
    
     "github.com/gorilla/websocket"
    )
    
    func main() {
     u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/websocket"}
     conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
     if err != nil {
         log.Fatal(err)
     }
     defer conn.Close()
    
     for i := 0; i < 5; i++ {
         message := []byte("Hello from client")
         if err := conn.WriteMessage(websocket.TextMessage, message); err != nil {
             log.Fatal(err)
         }
    
         _, receivedMessage, err := conn.ReadMessage()
         if err != nil {
             log.Fatal(err)
         }
         log.Printf("Received message from server: %s", receivedMessage)
     }
    }

上記の 2 つを実行しますコード ファイル。これにより、WebSocket プロトコルに基づいたクライアントとサーバー間の通信が可能になります。クライアントはサーバーにメッセージを送信し、サーバーからメッセージを受信し、これを 5 回繰り返します。

概要
この記事では、Go 言語で一般的に使用されるネットワーク プログラミング関数をいくつか紹介し、WebSocket 通信を例とともに実装します。この知識を学ぶことで、より深く理解し、実際のネットワーク プログラミングに適用できるようになります。 Web アプリケーションを開発する場合でも、その他のネットワーク通信シナリオを開発する場合でも、これらのネットワーク プログラミング機能を習得すると、開発効率が大幅に向上します。学習を通じて Go 言語のネットワークプログラミングの特徴をさらに理解し、実際のプロジェクトに柔軟に適用できることを期待します。

以上がGo言語でネットワークプログラミング機能を学び、WebSocket通信を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。