Douyu Live は中国最大のゲーム ライブ ブロードキャスト プラットフォームの 1 つで、毎日何百万ものユーザーがゲームのライブ ブロードキャストを視聴したり、オンラインでコミュニケーションを行っています。これらのライブ ブロードキャスト ルームでは、集中砲火がインタラクションとエンターテイメントの重要な部分になっています。そこで、本記事ではDouyu生放送の弾幕の特徴をより良く理解するために、golangを利用してDouyu生放送の弾幕を取得・分析してみます。
1. Douyu Barrage Protocol の概要
Douyu Barrage Protocol は、Douyu ライブブロードキャストにおけるクライアントとサーバー間の通信プロトコルであり、公式 API インターフェースを通じて使用できます。弾幕データを取得します。
これらのデータはある程度フォーマットおよびエンコードされているため、仕事でデコードして処理する必要があります。以下に例を示します。
type Message struct { Length int // 消息长度 Type int // 消息类型 Data string // 消息内容 Xor byte // 异或校验码 }
これは、リレー サーバーによって渡される元の情報構造であり、メッセージの長さ、メッセージ タイプ、メッセージの内容、および XOR チェック コードが含まれます。送信者やレベルなどの有用な情報を取得するには、それをデコードして処理する必要があります。
2. Douyu 弾幕プロトコルの詳細説明
Douyu 弾幕プロトコルは主に 3 つの部分に分かれています:
弾幕サーバーに接続する前に、ハンドシェイクリクエストを送信する必要があります。ルールは次のとおりです:
数据格式:消息长度 + 消息类型 + 加密字段 + 固定值1 + 固定值2
このうち、メッセージの長さは固定値で、暗号化フィールドの長さは 8 バイトです、メッセージ タイプは固定値、暗号化フィールドは暗号化に使用されるランダムな文字列です。
ハンドシェイクが成功した後、追加の権限を取得するためにログインする必要があります:
数据格式:消息长度 + 消息类型 + 加密字段 + 用户名 + 加密后的密码 + 客户端类型 + 固定值
ログイン後、特定の部屋で箇条書きコメントを受信する許可を取得します。同時に、受信した弾幕はDouyu独自のフォーマットで送信されます。
接続を維持するには、特定の頻度でサーバーにハートビート パケットを送信する必要があります。同時に、サーバーは定期的に弾幕情報を送信します。
弾幕情報の形式は以下のとおりです。
数据格式:长度 + 固定值 + 固定值 + 内容 + 0
このうち、length は後続のデータの長さを表し、内容は弾幕の固有のエンコーディングになります。コードには送信者の名前、レベル、弾幕の具体的な内容が含まれています。有用な情報を得るには、これらのコードをデコードする必要があります。
3. Golang による Douyu 弾幕取得の実装
上記を踏まえて、Golang による Douyu 弾幕取得を実現する具体的な処理を実装することができます。
まず、golang を使用してソケット接続を処理する必要があります。 Douyu は TCP データ プロトコルに基づいてカプセル化されたバイナリ メッセージ形式を使用するため、「golang.org/x/net/websocket」パッケージを直接使用することはできません。現時点では、「goim/libs/protocol」パッケージを使用してデータを処理できます。このパッケージは、データ構造の定義とデコード作業の一部を完了するのに役立ち、プレッシャーを軽減できます。
次に、メッセージを取得した後、メッセージをデコードする必要があります。このプロセスには、Douyu Barrage のプロトコル ルールとコーディングの分析が含まれます。
最後に、golang の Websocket プロトコルを使用して、デコードされたデータをフロントエンドにストリーミングして表示できます。
実装プロセス中に、golang のコルーチン機能を使用してパフォーマンスを向上させたり、バッファー キューやその他のテクノロジを使用して同時実行性が高い状況を処理したりできます。
つまり、golang を使用して Douyu ライブブロードキャストの弾幕を取得および分析することで、Douyu の弾幕プロトコルをより深く理解し、より幅広い分野に適用することができます。
以上がDouyu 生放送の弾幕取得と分析を Golang で実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。