PHPインスタントメッセージングの設計と実装

インスタントメッセージングの詳細設計と実装(PHP + GatewayWorker + Redisの)

私たちは、機能を実装する必要があります

  • 一つのチャット(ささやき)
  • チャット-多くの(グループチャット)
  • 同様にQQ、マイクロ文字や他のリアルタイムチャットメッセージのリスト

ツールの選択

  • GatewayWorkerは、以下のような特徴がある(複数のネットワーク審査官のマニュアルを参照してください)

    • ベースWorkerman開発
    • ベースのゲートウェイ、ワーカープロセスモデル
    • 分散展開をサポート
    • 高い同時実行をサポートしています
    • 任意のクライアントにグローバルブロードキャストまたはプッシュデータをサポートしています
    • アプリケーション層プロトコルの様々なサポート
    • マルチプロトコルのサポート
    • 永久支持体を維持するために、オブジェクト、またはリソース
    • 高性能
    • 他のプロジェクトとの容易な統合
    • 長い接続をサポートしています
私たちは、主に、それはプロトコルをWebSocketを使用して、このフレームワークは、GatewayWorkerは、独立して展開することができThinkPHP、laravelや他のフレームワークと組み合わせて使用​​するために、関連するビジネスロジックの責任は非常に便利であるPHP
  • キー操作、セットリストをRedisの。
インスタントメッセージングは​​、最も重要なのは、応答の速さで、私たちは、「メッセージ一覧」それでは未読メッセージ、未読の数、最後のメッセージの内容、時間などがあるでしょうを表示する必要があります。

WebSocketとGatewayWorker原理はもはや使用物語は、子供用の靴は、あなたのお母さんの程度を理解しないでくださいします

結果は

グループチャット|ささやきレンダリング

mahua

メッセージ一覧のレンダリング

mahua

データベース設計(別途、グループチャット、プライベートチャット)

ウィスパー設計(デザインブリーフ)


パラメータ名 説明
ID 主キー
SENDER_ID 送信者ID
receive_id 受信者ID
chat_identify 識別:チャットとB、Bとチャットを。録音AB
message_details メッセージの内容
last_time_at チャット記録間隔は、所定の時間を超えて
  • より簡単に、B間のチャットを見つけるために、この分野でchat_identify現場での使用、。
  • last_time_at QQ、マイクロチャネルとの間のチャット、時間間隔は、1つのチャット当たりない表示時間を記録します

グループチャット(デザインブリーフ)

  • そしてささやき好きですが、受信機のIDは、GROUP_IDグループIDになります。

メッセージリストのデザインは、「プライベートチャット、グループチャット」の効果を期待し、そのリスト表示では、データの変更がリアルタイムで起こります。Redisのとここに

各ユーザーリストには、キー= message_listのコレクションです:USER_ID
Redis集合存储 消息类型 1私信,2群聊

message_list:user_id{
    json_encode(['消息类型','接收者id|群组id']),
    json_encode(['消息类型','接收者id|群组id']),
    json_encode(['消息类型','接收者id|群组id']),
}

查找每个人的消息列表,直接取出该列表即可,但每个成员 都要对应 ‘未读消息数量’,‘最后一条消息内容’,‘最后一条小时时间’。由于是可变的,所以需要单独存储

Redis 键值 key = message_content:user_id_消息类型_id

key =>json_encode(['消息数量','最后一条消息内容','时间'])

上面 集合列表里的每一个成员都 对应这里的每个键值。
  • ニュースは、すべての操作のRedis、適切な更新を更新します。
  • 速度は、かなり迅速Redisのは間違いありません。

地域のニーズのその後の最適化

  • ウィスパー|グループチャットはテーブルが記録されます。現在の設計では、単一のフォームライブラリです。もちろん、ユーザーの増加、必然的な破裂と。クエリの応答速度に影響を与えます。

    • (ソリューション何より:サブライブラリーのサブテーブル、転写バックアップ履歴)
  • GatewayWorker通信フレームワークは、高い同時実行性をサポートできない、単一サーバー展開です。

ここでは、単にインスタントメッセージングのために設計されているあなたが質問や提案がありましたら、コメント欄にご返信くださいいくつかの簡単な博覧会をしました。

おすすめ

転載: www.cnblogs.com/jlfw/p/12049424.html