Beego でのリアルタイム通信に WebSocket を使用する

WBOY
リリース: 2023-06-23 11:52:40
オリジナル
2094 人が閲覧しました

今日のインターネット時代において、リアルタイム通信は多くのアプリケーション シナリオにおいて不可欠な機能となっています。オンライン チャット、リアルタイム ゲームから監視システムに至るまで、リアルタイム コミュニケーションの需要が高まっています。リアルタイム通信を実現する最も一般的な方法は、WebSocket プロトコルを使用することです。

WebSocket プロトコルは、HTML5 仕様の新しいネットワーク通信プロトコルであり、TCP 接続で全二重通信チャネルを提供できます。 WebSocket プロトコルを使用するとリアルタイム通信機能を簡単に実現でき、高速かつ効率的な Web フレームワークである Beego は当然 WebSocket プロトコルをサポートします。

この記事では、WebSocket を使用して Beego でリアルタイム通信を実現するプロセスを紹介します。まず、Beego フレームワークをインストールする必要があります。

go get github.com/astaxie/beego
ログイン後にコピー

インストールが完了したら、Beego フレームワークの使用を開始できます。 Beego を使用して WebSocket を実装する前に、まず WebSocket プロトコルを理解する必要があります。 WebSocket プロトコルには、ハンドシェイク、データ転送、およびクローズの 3 つのフェーズがあります。

ハンドシェイク フェーズでは、クライアントは HTTP リクエストをサーバーに送信し、WebSocket プロトコルへのアップグレードを要求します。リクエストを受信したサーバーは 101 Switching Protocols レスポンスを返し、この時点で WebSocket 接続が確立されています。データ転送フェーズでは、クライアントとサーバーは相互にデータを転送できます。シャットダウン フェーズ中に、クライアントまたはサーバーはシャットダウン フレームを送信して WebSocket 接続を閉じることができます。

Beego では、beego.Controller の WebSocket 関数を実装することで、WebSocket の 3 段階を実装できます。

最初に、WebSocket コントローラーを作成する必要があります:

package controllers

import (
    "github.com/astaxie/beego"
    "github.com/gorilla/websocket"
)

type WebSocketController struct {
    beego.Controller
}

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

func (this *WebSocketController) Get() {
    conn, err := upgrader.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil)
    if err != nil {
        beego.Error("WebSocket协议升级失败:", err)
        return
    }
    // 处理连接
}
ログイン後にコピー

上記のコードでは、ゴリラ/Websocket パッケージを通じてアップグレーダーを作成し、Get メソッドメソッド アップグレード プロトコルでアップグレーダーのアップグレードを呼び出しました。 。この時点で、WebSocket 接続は正常に確立されています。次に、WebSocket 接続を処理する必要があります。

WebSocket 接続の処理には、Goroutine を使用できます。新しい接続が発生するたびに、新しい goroutine を開いて接続を処理します:

func (this *WebSocketController) Get() {
    conn, err := upgrader.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil)
    if err != nil {
        beego.Error("WebSocket协议升级失败:", err)
        return
    }
    go this.handleConnection(conn)
}

func (this *WebSocketController) handleConnection(conn *websocket.Conn) {
    defer conn.Close()
    // 处理连接
}
ログイン後にコピー

接続を処理するメソッドでは、for ループを使用してクライアントからデータを継続的に読み取ることができます:

func (this *WebSocketController) handleConnection(conn *websocket.Conn) {
    defer conn.Close()
    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            beego.Error("读取消息失败:", err)
            return
        }
        // 处理消息
    }
}
ログイン後にコピー

メッセージを処理するメソッドでは、クライアントから送信されたデータに基づいて対応する処理を実行し、処理結果をクライアントに送り返すことができます。

func (this *WebSocketController) handleConnection(conn *websocket.Conn) {
    defer conn.Close()
    for {
        _, msg, err := conn.ReadMessage()
        if err != nil {
            beego.Error("读取消息失败:", err)
            return
        }
        // 处理消息
        reply := "收到消息:" + string(msg)
        err = conn.WriteMessage(websocket.TextMessage, []byte(reply))
        if err != nil {
            beego.Error("发送消息失败:", err)
            return
        }
    }
}
ログイン後にコピー

上記のコードは、単純な WebSocket を実装しています。エコーサーバーはクライアントからデータを受け取った後、そのままデータを返します。実際のアプリケーションでは、必要に応じて対応するデータ処理を実行し、処理結果をリアルタイムでクライアントにプッシュできます。

最後に、WebSocket コントローラーをルーティングに登録する必要があります:

beego.Router("/websocket", &controllers.WebSocketController{})
ログイン後にコピー

この時点で、WebSocket を使用して Beego フレームワークでリアルタイム通信を実現するプロセスが完了しました。 Beego は WebSocket 機能を実装するために Gorilla/websocket パッケージを使用するため、このパッケージをプロジェクトにインポートする必要があることに注意してください。

要約すると、Beego は、WebSocket プロトコルと組み合わせることでリアルタイム通信機能を簡単に実現できる、強力で使いやすい Web フレームワークです。 WebSocketを使ってリアルタイム通信を実装する場合、プロトコルの3つのフェーズに注意し、ゴルーチンを使って処理する必要があります。

以上がBeego でのリアルタイム通信に WebSocket を使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!