ホームページ > バックエンド開発 > Golang > Go 言語でネットワーク プログラミング機能を学び、WebSocket サーバー チャット ルームを実装しますか?

Go 言語でネットワーク プログラミング機能を学び、WebSocket サーバー チャット ルームを実装しますか?

王林
リリース: 2023-07-30 18:43:54
オリジナル
972 人が閲覧しました

Go 言語でネットワーク プログラミング関数を学習し、WebSocket サーバー チャット ルームを実装します

はじめに
インターネットの急速な発展に伴い、Web アプリケーションは人々の生活に欠かせないものになりました。リアルタイム通信の実現は、Web アプリケーションの重要なコンポーネントの 1 つです。 WebSocket は双方向通信を提供し、ブラウザとサーバーの間に永続的な接続を確立できるプロトコルです。この記事では、Go 言語のネットワーク プログラミング関数を使用し、WebSocket プロトコルと組み合わせて、簡単なチャット ルーム サーバーを実装する方法を紹介します。

準備
コードを書き始める前に、Go 言語開発環境をインストールし、Go の基本構文を理解する必要があります。さらに、WebSocket プロトコルの処理を簡素化するために、オープンソースの WebSocket ライブラリを使用する必要もあります。ライブラリは次のコマンドでインストールできます:

go get github.com/gorilla/websocket
ログイン後にコピー

コード実装
まず、必要なパッケージをインポートする必要があります:

package main

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

    "github.com/gorilla/websocket"
)
ログイン後にコピー

次に、WebSocket 接続用のアップグレーダーを定義します。アップグレーダーは http.HandlerFunc で、HTTP 接続を WebSocket 接続にアップグレードします:

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
    CheckOrigin: func(r *http.Request) bool {
        return true
    },
}
ログイン後にコピー

次に、チャット ルーム サーバーを表す構造体を定義します:

type ChatRoom struct {
    clients   map[*websocket.Conn]bool
    broadcast chan []byte
}

func newChatRoom() *ChatRoom {
    return &ChatRoom{
        clients:   make(map[*websocket.Conn]bool),
        broadcast: make(chan []byte),
    }
}
ログイン後にコピー

次に、チャット ルームを実装します。サーバーメソッド。 1 つ目は、WebSocket 接続とメッセージ処理のアップグレードを処理するために使用される handleWebSocket 関数です:

func (c *ChatRoom) handleWebSocket(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Println(err)
        return
    }

    c.clients[conn] = true

    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            delete(c.clients, conn)
            break
        }

        c.broadcast <- msg
    }

    defer conn.Close()
}
ログイン後にコピー

次に、接続されているすべてのクライアントにメッセージをブロードキャストするために使用される、broadcastMessage 関数を実装します:

func (c *ChatRoom) broadcastMessage() {
    for {
        msg := <-c.broadcast

        for client := range c.clients {
            err := client.WriteMessage(websocket.TextMessage, msg)
            if err != nil {
                log.Println(err)
                client.Close()
                delete(c.clients, client)
            }
        }
    }
}
ログイン後にコピー

最後に、チャット ルーム サーバーの起動に使用される main 関数を実装します:

func main() {
    room := newChatRoom()

    go room.broadcastMessage()

    http.HandleFunc("/ws", room.handleWebSocket)

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(err)
    }
}
ログイン後にコピー

Run
コード ディレクトリで次のコマンドを実行して、チャット ルーム サーバーを起動します:

go run main.go
ログイン後にコピー

次に、ブラウザで http にアクセスします: //localhost:8080、ブラウザの開発者ツールを開き、コンソールを [WebSocket] タブに切り替え、次の JavaScript コードを使用してサーバーに接続します:

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

socket.onopen = function(event) {
  console.log("Connected to the server");
};

socket.onmessage = function(event) {
  console.log("Received message: " + event.data);
};

socket.onclose = function(event) {
  console.log("Disconnected from the server");
};

socket.send("Hello, server!");
ログイン後にコピー

これで、次のことができます。これはブラウザとサーバーの間で行われます。リアルタイムの双方向通信です。

概要
Go 言語でネットワーク プログラミング関数を学習し、WebSocket プロトコルと組み合わせることで、簡単なチャット ルーム サーバーを実装しました。 WebSocket は、ブラウザとサーバーの間に永続的な接続を確立して、リアルタイム通信を実現します。 Golang のネットワーク プログラミング機能を利用すると、WebSocket 接続とメッセージ送信を簡単に処理できます。この記事が Go 言語でのネットワーク プログラミングと WebSocket の学習に役立つことを願っています。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート