ホームページ  >  記事  >  バックエンド開発  >  Go言語を使用してWebSocketチャットルームを開発する方法

Go言語を使用してWebSocketチャットルームを開発する方法

PHPz
PHPzオリジナル
2023-12-14 13:46:50895ブラウズ

Go言語を使用してWebSocketチャットルームを開発する方法

Go 言語を使用して Websocket チャット ルームを開発する方法

Websocket は、サーバーとクライアント間の双方向通信を可能にするリアルタイム通信プロトコルです。接続。 。 Websocket は、リアルタイムのメッセージ交換を可能にし、効率的なパフォーマンスを提供するため、チャット ルームを開発する場合に非常に良い選択肢です。この記事では、Go 言語を使用して簡単な Websocket チャット ルームを開発する方法と、いくつかの具体的なコード例を紹介します。

1. 準備作業

1. Go 言語環境のインストール

始める前に、まず Go 言語環境をインストールする必要があります。 Go 言語の公式 Web サイト (https://golang.org/) では、各プラットフォーム用のインストール パッケージが提供されており、ご使用のオペレーティング システムに応じてダウンロードしてインストールできます。

2. WebSocket ライブラリをインストールする

Go 言語では、「github.com/gorilla/websocket」パッケージを使用して WebSocket 関連の機能を提供します。次のコマンドでパッケージをインストールできます:

go get github.com/gorilla/websocket

2. チャット ルーム サーバーを作成します

最初に、チャット ルーム サーバーを作成する必要があります。 Websocket 接続の確立とメッセージの送受信を処理するために使用される単純なサーバー。

package main

import (
    "fmt"
    "log"
    "net/http"

    "github.com/gorilla/websocket"
)

var clients = make(map[*websocket.Conn]bool) // 存储连接的客户端
var broadcast = make(chan Message)           // 消息广播通道

// 定义消息结构体
type Message struct {
    Username string `json:"username"`
    Message  string `json:"message"`
}

func main() {
    http.HandleFunc("/ws", handleConnections)

    go handleMessages()

    // 启动服务器
    log.Println("服务器启动,监听端口:8080")
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

func handleConnections(w http.ResponseWriter, r *http.Request) {
    // 升级HTTP连接为Websocket连接
    ws, err := websocket.Upgrade(w, r, nil, 1024, 1024)
    if err != nil {
        log.Fatal(err)
    }

    // 关闭连接
    defer ws.Close()

    // 将客户端连接添加到clients映射中
    clients[ws] = true

    for {
        var msg Message
        // 读取客户端发送的消息
        err := ws.ReadJSON(&msg)
        if err != nil {
            log.Printf("读取消息错误:%v", err)
            delete(clients, ws)
            break
        }

        // 将接收到的消息放入广播通道中
        broadcast <- msg
    }
}

func handleMessages() {
    for {
        // 从广播通道中读取消息
        msg := <-broadcast

        // 遍历所有连接的客户端,将消息发送给每个客户端
        for client := range clients {
            err := client.WriteJSON(msg)
            if err != nil {
                log.Printf("发送消息错误:%v", err)
                client.Close()
                delete(clients, client)
            }
        }
    }
}

上記のコードは、単純な Websocket チャット ルーム サーバーを作成します。 handleConnections 関数では、受信したメッセージをブロードキャスト チャネルに入れます。 handleMessages関数はブロードキャスト チャネルからメッセージを読み取り、接続されているすべてのクライアントにメッセージを送信します。

3. フロントエンド インターフェイスの作成

次に、ユーザーがユーザー名とメッセージを入力し、チャット コンテンツをリアルタイムで表示するためのフロントエンド インターフェイスを作成する必要があります。

<!doctype html>
<html>

<head>
  <title>Websocket 聊天室</title>
  
  <style>
    #message-box {
      height: 500px;
      overflow-y: scroll;
    }
  </style>
</head>

<body>
  <h1>Websocket 聊天室</h1>

  <div id="message-box"></div>

  <form id="message-form" onsubmit="sendMessage(event)">
    <input type="text" id="username" placeholder="请输入用户名" required>
    <br />
    <input type="text" id="message" placeholder="请输入消息" required>
    <br />
    <button type="submit">发送</button>
  </form>

  <script>
    const socket = new WebSocket("ws://localhost:8080/ws");

    socket.onmessage = function (event) {
      const data = JSON.parse(event.data);
      const messageBox = document.getElementById("message-box");
      const messageElement = document.createElement("p");
      messageElement.innerText = data.username + ": " + data.message;
      messageBox.appendChild(messageElement);
    };

    function sendMessage(event) {
      event.preventDefault();

      const username = document.getElementById("username").value;
      const message = document.getElementById("message").value;

      const data = {
        username: username,
        message: message
      };

      socket.send(JSON.stringify(data));
      document.getElementById("message").value = "";
    }
  </script>
</body>

</html>

上記のコードは、ユーザー名入力ボックス、メッセージ入力ボックス、送信ボタンを含む単純な HTML インターフェイスを作成します。受信したメッセージを socket.onmessage を通じて処理し、メッセージ ボックスにメッセージを表示します。入力メッセージを socket.send 経由で送信します。

4. プログラムを実行します

ターミナルでプロジェクト ディレクトリに入り、次のコマンドを実行してサーバーを起動します:

go run main.go

次に、index.html を開きます。 # ブラウザの ## ページで、ユーザー名とメッセージを入力し、[送信] をクリックします。

上記の手順により、Go 言語を使用した簡単な Websocket チャット ルームの開発に成功しました。実際の開発では、チャット記録やプライベートメッセージなど、さらに多くの機能を追加することができます。この記事が、Websocket チャット ルームを開発するための Go 言語の理解と学習に役立つことを願っています。

以上がGo言語を使用してWebSocketチャットルームを開発する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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