ホームページ  >  記事  >  バックエンド開発  >  golang WebSocketとブラウザの統合:即時通信を実現

golang WebSocketとブラウザの統合:即時通信を実現

WBOY
WBOYオリジナル
2023-12-17 11:21:43661ブラウズ

golang WebSocket与浏览器的集成:实现即时通信

Golang は効率的でシンプルで習得しやすいプログラミング言語であり、WebSocket は即時通信のための重要なテクノロジです。この記事では、Golang に WebSocket を統合し、ブラウザとのインスタント通信を実装する方法を紹介します。

1. はじめに

Web アプリケーション開発において、リアルタイム通信は非常に重要な機能要件です。従来のHTTPプロトコルはステートレスなプロトコルであり、リアルタイム通信を実現できませんでした。その結果、WebSocket が誕生しました。 WebSocket は、クライアントとサーバー間のリアルタイム通信を可能にする全二重通信チャネルを提供する TCP ベースのプロトコルです。

Golang は強力なバックエンド言語として、WebSocket を非常に適切にサポートしています。 Golang の同時実行機能と簡潔な構文を使用すると、WebSocket とブラウザー間の即時通信を簡単に実装できます。

2. Golang の WebSocket

まず、Golang の net/http パッケージを使用してサーバーを作成する必要があります。以下は簡単なサンプル コードです。

package main

import (
    "log"
    "net/http"
)

func wsHandler(w http.ResponseWriter, r *http.Request) {
    // 在这里处理WebSocket的逻辑

}

func main() {
    http.HandleFunc("/", wsHandler)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

上記のコードでは、まず WebSocket リクエストを処理する wsHandler 関数を定義し、次に http.HandleFunc を使用してルートパスに登録します。最後に、http.ListenAndServe 関数を使用して、ポート 8080 でサーバーをリッスンします。

次に、wsHandler 関数で WebSocket ロジックを処理する必要があります。 Golang の net/http パッケージは、HTTP リクエストを WebSocket 接続にアップグレードするための Upgrade 関数を提供します。 Upgrade 関数を使用して、HTTP 接続を WebSocket 接続にアップグレードできます。

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

    for {
        // 在这里处理WebSocket的消息
    }
}

上記のコードでは、まず upgrader.Upgrade 関数を呼び出して、HTTP 接続を WebSocket 接続にアップグレードします。次に、conn オブジェクトを通じてブラウザと対話します。 conn オブジェクトを使用すると、WriteMessage 関数を使用してブラウザにメッセージを送信し、ReadMessage 関数を使用してブラウザによって送信されたメッセージを受信できます。

3. ブラウザ側の WebSocket

Golang とブラウザ間の WebSocket 通信をデモするには、単純なフロントエンド ページが必要です。以下は、JavaScript で実装された WebSocket クライアントのサンプル コードです。

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Demo</title>
    <script>
        var ws = new WebSocket("ws://localhost:8080/");

        ws.onopen = function() {
            // 连接建立后的逻辑
        };

        ws.onmessage = function(evt) {
            // 接收到消息后的逻辑
        };

        ws.onclose = function() {
            // 连接关闭后的逻辑
        };

        function sendMessage() {
            var message = document.getElementById("message").value;
            ws.send(message);
        }
    </script>
</head>
<body>
    <input id="message" type="text" />
    <button onclick="sendMessage()">发送消息</button>
</body>
</html>

上記のコードでは、最初に WebSocket オブジェクトを作成し、サーバーのアドレスを指定します。 ws.onopen 関数では、接続が確立された後にロジックを実装できます。##ws.onmessage 関数では、メッセージを受信した後にロジックを実装できます。 #ws .onclose 関数では、接続が閉じられた後のロジックを実装できます。さらに、ユーザーが入力したメッセージをサーバーに送信するための sendMessage 関数も提供します。 4. インスタント メッセージングの実装

基本的なサーバーとクライアントのコードを使用して、インスタント メッセージング機能の実装を開始できます。以下に、ブラウザにメッセージを入力した後、サーバー側で接続されている他のクライアントにメッセージをブロードキャストする簡単な例を示します。

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

    for {
        // 接收消息
        messageType, message, err := conn.ReadMessage()
        if err != nil {
            log.Println(err)
            break
        }

        log.Printf("Received message: %s", message)

        // 广播消息
        for c := range connections {
            err := c.WriteMessage(messageType, message)
            if err != nil {
                log.Println(err)
            }
        }
    }
}

上記のコードでは、最初に

conn.ReadMessage

Function を使用します。ブラウザから送信されたメッセージを受信します。次に、接続されているすべてのクライアントをループし、c.WriteMessage 関数を使用してメッセージをブロードキャストします。 5. 概要

この記事では、Golang を使用して WebSocket を統合し、ブラウザーにインスタント メッセージング機能を実装する方法を紹介します。最初に Golang の

net/http

パッケージを導入し、簡単なサーバーを作成しました。次に、net/http パッケージで提供される Upgrade 関数を使用して、HTTP リクエストを WebSocket 接続にアップグレードします。最後に、JavaScript を使用してブラウザーで WebSocket オブジェクトを作成し、接続の確立、メッセージの受信、メッセージの送信のロジックを実装します。 この記事が、Golang でブラウザーとのインスタント通信を実装する方法を理解するのに役立つことを願っています。これに興味がある場合は、メッセージ認証、メッセージ圧縮など、より高度な WebSocket 機能を試すことができます。 Golang と WebSocket を探索する旅がうまくいきますように!

以上がgolang WebSocketとブラウザの統合:即時通信を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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