ホームページ バックエンド開発 Golang golang WebSocket の例: 単純なチャット アプリケーションの構築

golang WebSocket の例: 単純なチャット アプリケーションの構築

Dec 18, 2023 am 08:13 AM
golang websocket チャットアプリ

golang WebSocket示例:构建一个简单的聊天应用

Golang WebSocket の例: 単純なチャット アプリケーションの構築

インターネットの発展に伴い、リアルタイム コミュニケーションがますます注目を集めています。リアルタイム通信プロトコルとして、WebSocket はクライアントとサーバーの間に永続的な接続を確立し、双方向のリアルタイム データ送信を可能にします。この記事では、Golang を使用して、WebSocket 経由でリアルタイム メッセージを送受信する簡単なチャット アプリケーションを構築する方法を紹介します。

開始する前に、Golang 開発環境がコンピュータに正しくインストールされていることを確認してください。

まず、Golang で一般的に使用される WebSocket ライブラリである「Gorilla Websocket」パッケージをインポートする必要があります。ターミナルで次のコマンドを使用してインストールします:

1

go get github.com/gorilla/websocket

ログイン後にコピー

次に、main.go ファイルを作成し、必要なパッケージをインポートします:

1

2

3

4

5

6

7

8

package main

 

import (

    "log"

    "net/http"

 

    "github.com/gorilla/websocket"

)

ログイン後にコピー

main 関数で、WebSocket プロセッサ関数を定義します。クライアントからの WebSocket 接続リクエストを処理するために使用されます:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

func wsHandler(w http.ResponseWriter, r *http.Request) {

    // 升级HTTP连接为WebSocket连接

    conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)

    if err != nil {

        log.Println(err)

        return

    }

 

    // 处理WebSocket连接

    for {

        // 读取客户端发送的消息

        _, msg, err := conn.ReadMessage()

        if err != nil {

            log.Println(err)

            break

        }

 

        // 将消息发送给所有连接的客户端

        for client := range clients {

            err := client.WriteMessage(websocket.TextMessage, msg)

            if err != nil {

                log.Println(err)

                client.Close()

                delete(clients, client)

            }

        }

    }

 

    // 关闭WebSocket连接

    conn.Close()

}

ログイン後にコピー

上記のコードでは、まず HTTP 接続を WebSocket 接続にアップグレードし、次に for ループを使用してクライアントから送信されたメッセージを継続的に受信します。メッセージは接続されているすべてのクライアントに送信されます。エラーが発生したり、クライアントが切断されたりすると、対応する接続​​が閉じられます。

次に、接続されているすべてのクライアントを保存するためにグローバル変数 client を定義する必要があります:

1

var clients = make(map[*websocket.Conn]bool)

ログイン後にコピー

次に、main 関数のコードを変更し、WebSocket プロセッサ関数を「/ws」で接続します。パスを関連付けて HTTP サーバーを起動します:

1

2

3

4

5

6

7

8

func main() {

    http.HandleFunc("/ws", wsHandler)

 

    err := http.ListenAndServe(":8000", nil)

    if err != nil {

        log.Fatal("ListenAndServe: ", err)

    }

}

ログイン後にコピー

最後に、ブラウザまたは WebSocket クライアント ツールを使用してチャット アプリケーションをテストできます。ブラウザに「http://localhost:8000」と入力し、コンソールを開き、次の JavaScript コードを実行します。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

var ws = new WebSocket("ws://localhost:8000/ws");

 

// 连接建立时触发的事件

ws.onopen = function() {

    console.log("连接成功");

};

 

// 收到消息时触发的事件

ws.onmessage = function(evt) {

    console.log("收到消息:" + evt.data);

};

 

// 发送消息

ws.send("Hello, World!");

ログイン後にコピー

上記のコードを通じて、サーバーから「Hello, World!」を受信します。というメッセージをコンソールに出力します。

これまでのところ、Golang と WebSocket を使用してリアルタイム メッセージを送受信する単純なチャット アプリケーションを構築することに成功しました。もちろん、これは単なる基本的な例であり、ニーズに応じて拡張および最適化できます。この記事があなたのお役に立てば幸いです。また、Golang と WebSocket を使用したリアルタイム通信アプリケーションの開発がさらに成功することを願っています。

以上がgolang WebSocket の例: 単純なチャット アプリケーションの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Golang を使用してファイルを安全に読み書きするにはどうすればよいですか? Jun 06, 2024 pm 05:14 PM

Golang を使用してファイルを安全に読み書きするにはどうすればよいですか?

Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Golang データベース接続用の接続プールを構成するにはどうすればよいですか? Jun 06, 2024 am 11:21 AM

Golang データベース接続用の接続プールを構成するにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか? Jun 05, 2024 pm 06:59 PM

Golang フレームワーク アーキテクチャの学習曲線はどれくらい急ですか?

Golangでリストからランダムな要素を生成するにはどうすればよいですか? Golangでリストからランダムな要素を生成するにはどうすればよいですか? Jun 05, 2024 pm 04:28 PM

Golangでリストからランダムな要素を生成するにはどうすればよいですか?

golangフレームワークの長所と短所の比較 golangフレームワークの長所と短所の比較 Jun 05, 2024 pm 09:32 PM

golangフレームワークの長所と短所の比較

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Golang フレームワークでのエラー処理のベスト プラクティスは何ですか? Jun 05, 2024 pm 10:39 PM

Golang フレームワークでのエラー処理のベスト プラクティスは何ですか?

golang フレームワーク ドキュメントの使用手順 golang フレームワーク ドキュメントの使用手順 Jun 05, 2024 pm 06:04 PM

golang フレームワーク ドキュメントの使用手順

See all articles