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

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

王林
王林オリジナル
2023-07-30 18:43:54887ブラウズ

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 までご連絡ください。