Golang Websocket 開発ガイド: 複数人オンラインコラボレーション機能の実装
はじめに:
Websocket は、クライアントとサーバーの間に永続的な接続を確立する方法です。サーバーがクライアントにメッセージをアクティブにプッシュする機能を実現できる通信プロトコル。実際のアプリケーションでは、Websocket はリアルタイム通知、チャット ルーム、複数人のオンライン コラボレーション、その他のシナリオで広く使用されています。この記事では、Golang を使用して Websocket アプリケーションを開発する方法を紹介し、それをコード例と組み合わせて、複数人によるオンライン コラボレーションを実装する方法を示します。
1. Golang Websocket の概要
Golang には、開発者が Websocket アプリケーションを迅速に構築できるようにするための Websocket ライブラリが組み込まれています。 Golang の Websocket ライブラリを使用すると、接続、メッセージの送受信、接続プールの管理などの Websocket 機能を簡単に実装できます。
2. Golang Websocket 開発環境の設定
Golang Websocket ライブラリのインストール
3. Golang Websocket 開発プロセス
接続プールの定義
以降のサンプル コードでは、グローバル接続プールを使用してすべてのクライアントの Websocket 接続を管理し、複数人によるオンライン コラボレーションの機能を実現します。構造体タイプの接続プールを定義します。構造体のフィールドには、接続を保存するためのミューテックスとスライスが含まれます。
type ConnPool struct { connLock sync.Mutex conns []*websocket.Conn }
WebSocket リクエストの処理
Golang では、HTTP リクエストは Http パッケージを通じて監視および処理できます。 Websocket リクエストを処理する関数を作成し、その関数を HTTP サーバーに登録する必要があります。
func wsHandler(w http.ResponseWriter, r *http.Request) { conn, err := websocket.Upgrade(w, r, nil, 1024, 1024) if err != nil { log.Println("websocket upgrade failed:", err) return } // 将连接添加到连接池中 pool.add(conn) // 具体的消息处理逻辑 go handleMessages(conn) }
メッセージ処理ロジック
サンプル コードでは、ゴルーチンを使用して接続ごとにメッセージの送受信を処理します。接続上のメッセージを読むことで、複数の人がオンラインで共同作業できます。新しいメッセージが送信されると、すべての接続が接続プールを通過してメッセージが送信されます。
func handleMessages(conn *websocket.Conn) { for { message := "" err := conn.ReadJSON(&message) if err != nil { log.Println("read message failed:", err) // 从连接池中删除连接 pool.remove(conn) break } // 遍历连接池,广播消息 pool.broadcast(message) } }
Websocket サーバーの開始
Websocket サーバーを開始する関数を作成します。この関数では、Http サーバー インスタンスを作成し、Websocket リクエストを処理する関数をバインドする必要があります。
func startServer() { http.HandleFunc("/ws", wsHandler) http.ListenAndServe(":8000", nil) }
完全なサンプル コード
以下は完全な Websocket アプリケーションのサンプル コードです:
package main import ( "log" "net/http" "sync" "github.com/gorilla/websocket" ) type ConnPool struct { connLock sync.Mutex conns []*websocket.Conn } var pool ConnPool func (p *ConnPool) add(conn *websocket.Conn) { p.connLock.Lock() defer p.connLock.Unlock() p.conns = append(p.conns, conn) } func (p *ConnPool) remove(conn *websocket.Conn) { p.connLock.Lock() defer p.connLock.Unlock() newConns := make([]*websocket.Conn, 0, len(p.conns)-1) for _, c := range p.conns { if c != conn { newConns = append(newConns, c) } } p.conns = newConns } func (p *ConnPool) broadcast(message string) { p.connLock.Lock() defer p.connLock.Unlock() for _, conn := range p.conns { err := conn.WriteJSON(message) if err != nil { log.Println("write message failed:", err) } } } func wsHandler(w http.ResponseWriter, r *http.Request) { conn, err := websocket.Upgrade(w, r, nil, 1024, 1024) if err != nil { log.Println("websocket upgrade failed:", err) return } pool.add(conn) go handleMessages(conn) } func handleMessages(conn *websocket.Conn) { for { message := "" err := conn.ReadJSON(&message) if err != nil { log.Println("read message failed:", err) pool.remove(conn) break } pool.broadcast(message) } } func startServer() { http.HandleFunc("/ws", wsHandler) http.ListenAndServe(":8000", nil) } func main() { startServer() }
4. サンプルを実行します
サンプル コードをコンパイルして実行します:
go build main.go ./main
結論:
この記事では、Golang を使用して Websocket アプリケーションを開発する方法を紹介し、具体的なコード例を通じて、複数人によるオンライン コラボレーションの機能を実現する方法を示します。この記事が Golang Websocket の理解と使用に役立つことを願っています。
以上がgolang Websocket 開発ガイド: 多人数オンラインコラボレーション機能の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。