ホームページ  >  記事  >  バックエンド開発  >  Go WebSocket は他のツールやライブラリとどのように統合しますか?

Go WebSocket は他のツールやライブラリとどのように統合しますか?

WBOY
WBOYオリジナル
2024-06-02 13:54:57750ブラウズ

Go WebSocket は、gRPC、PostgreSQL、React などのツールと統合できます。 gRPC: WebSocket 経由で gRPC トラフィックを送信し、リアルタイム通信とマイクロサービス インタラクションを実現します。 PostgreSQL: データベース イベントを WebSocket にプッシュして、データ変更のリアルタイム通知を実現します。 React: React アプリケーションのステータスをリアルタイムで更新し、インタラクティブで応答性の高い Web インターフェイスを作成します。

Go WebSocket 如何与其他工具和库集成?

Go WebSocket: 他のツールやライブラリとの統合

Go WebSocket を使用すると、開発者は Go アプリケーションで WebSocket 接続を簡単に作成および管理できます。他の多くのツールやライブラリと統合してアプリケーションの機能を強化できる広範な API を提供します。

gRPC との統合

gRPC は、マイクロサービスと分散アプリケーションを構築するための一般的な RPC フレームワークです。 Go WebSocket を gRPC と組み合わせて使用​​すると、WebSocket 経由で gRPC トラフィックを送信できます。

import (
    "context"
    "log"
    "net/http"

    "google.golang.org/grpc"
    "github.com/gorilla/websocket"
)

func main() {
    // 创建 WebSocket 服务
    ws := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }

    // 设置 WebSocket 路由规则
    http.HandleFunc("/grpc", func(w http.ResponseWriter, r *http.Request) {
        // 获取 WebSocket 连接对象
        conn, err := ws.Upgrade(w, r, nil)
        if err != nil {
            log.Fatal(err)
        }

        // 创建 gRPC 连接对象
        grpcConn, err := grpc.DialContext(context.Background(), "localhost:50051", grpc.WithInsecure())
        if err != nil {
            log.Fatal(err)
        }

        // 创建 gRPC 客户对象
        client := ... // 基于业务场景创建相应 gRPC 客户对象

        // 通过 WebSocket 传输 gRPC 请求
        go func() {
            for {
                mt, p, err := conn.ReadMessage()
                if err != nil {
                    log.Fatal(err)
                }

                if mt != websocket.BinaryMessage {
                    continue
                }

                // 解析 gRPC 流量
                stream := client.NewStream()

                // 发送 gRPC 请求
                if _, err = stream.Send(p); err != nil {
                    log.Fatal(err)
                }

                // 关闭流
                stream.CloseSend()
            }
        }()

        // 通过 WebSocket 传输 gRPC 响应
        go func() {
            for {
                in, err := stream.Recv()
                if err != nil {
                    log.Fatal(err)
                }

                // 将 gRPC 响应写入 WebSocket
                if err = conn.WriteMessage(websocket.BinaryMessage, in); err != nil {
                    log.Fatal(err)
                }
            }
        }()

        // 保持连接
        select {}
    })

    // 启动 HTTP 服务
    http.ListenAndServe(":8080", nil)
}

PostgreSQL との統合

PostgreSQL は人気のあるデータベース管理システムです。 Go WebSocket を PostgreSQL とともに使用すると、WebSocket 経由でデータベース イベントをプッシュできます。

import (
    "context"
    "fmt"
    "log"

    "github.com/gorilla/websocket"
    "github.com/jackc/pgx/v4"
)

func main() {
    // 创建 PostgreSQL 连接池
    connPool, err := pgx.NewPool(pgx.Config{
        User: "postgres",
        Password: "mysecretpassword",
        Database: "mydatabase",
        Port: 5432,
        Host: "localhost",
    })
    if err != nil {
        log.Fatal(err)
    }

    // 创建 WebSocket 服务
    ws := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }

    // 设置 WebSocket 路由规则
    http.HandleFunc("/postgres", func(w http.ResponseWriter, r *http.Request) {
        // 获取 WebSocket 连接对象
        conn, err := ws.Upgrade(w, r, nil)
        if err != nil {
            log.Fatal(err)
        }

        // 监听 PostgreSQL 通知
        row := connPool.QueryRow(context.Background(), "LISTEN mychannel")
        if err = row.Scan(); err != nil {
            log.Fatal(err)
        }

        // 发送事件到 WebSocket
        for {
            // 接收 PostgreSQL 通知
            notification, err := connPool.Listen(context.Background(), "mychannel")
            if err != nil {
                log.Fatal(err)
            }

            // 将通知内容转换为 JSON
            json := fmt.Sprintf(`{"type": "%s", "payload": "%s"}`, notification.Channel, notification.Payload)

            // 将 JSON 写入 WebSocket
            if err = conn.WriteMessage(websocket.TextMessage, []byte(json)); err != nil {
                log.Fatal(err)
            }
        }
    })

    // 启动 HTTP 服务
    http.ListenAndServe(":8080", nil)
}

React との統合

React は、Web アプリケーションを構築するための人気のある JavaScript フレームワークです。 Go WebSocket を React と組み合わせて使用​​すると、WebSocket 経由でアプリケーションの状態をリアルタイムで更新できます。

import React, { useState, useEffect } from "react";
import { useWebSockets } from "@react-native-community/hooks";

const App = () => {
  const [messages, setMessages] = useState([]);

  const { socketRef, send } = useWebSockets(`ws://localhost:8080/websocket`);

  useEffect(() => {
    socketRef.current.addEventListener("message", (event) => {
      setMessages((prevMessages) => [...prevMessages, event.data]);
    });
  }, [socketRef]);

  return (
    <div>
      {messages.map((message) => <p>{message}</p>)}
    </div>
  );
};

export default App;

概要

Go WebSocket は、幅広いツールやライブラリと統合でき、強力でスケーラブルな Web アプリケーションを構築するために必要な柔軟性を提供します。 gRPC、PostgreSQL、React を統合することにより、Go WebSocket はさまざまなシナリオでのリアルタイム通信とデータ同期を促進できます。

以上がGo WebSocket は他のツールやライブラリとどのように統合しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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