5

私は、ユーザーがチャットを介して互いに話すことができるモバイルアプリケーションを持っています (チャットルームではなく、ユーザー間のみ)。

今日、すべてが同期しています。おそらく PubNub や Pusher を使用して、ソリューションをより「リアルタイム」なものに切り替えることを検討しています。

サーバーが送信されたすべてのメッセージを保存する必要があることを考えると、それを行うための最良の方法について疑問に思っています.

私たちが念頭に置いていること:

  • 各モバイル アプリは、ユーザー ID をチャネル名として使用してチャネルを作成します。
  • このチャネルは、モバイル アプリ/サーバー通信に使用されます。

私の問題はサーバーに関するものです。現在、Nginx/PHP バックエンドがあります。ユーザーが送信したメッセージを独自のサーバーに保存する必要があるため、サーバーがすべてのユーザーチャネルをリッスンできるようにしたいと考えています。

ユーザー間のコミュニケーションのために、メッセージ内に独自のプロトコルを作成することを考えています。例えば。ユーザー 111 がユーザー 222 に "hello" を送信したい場合、ユーザーは "to:222 hello" を発行できます。これはサーバーによって取得されます。

サーバーは、このコマンドを受信すると、「from:111 hello」を自分のチャネル (222) にプッシュします。

この設計の問題点は、サーバーがデータベース内の全ユーザーと同じ数のチャネルを開く必要があることです。

それを行うためのより良い方法がわかりません。

4

2 に答える 2

4

メッセージ履歴付きの PubNub チ​​ャット

朗報: 各ユーザーに割り当てられた多数の異なるチャネルを持つチャット アプリを簡単に作成し、PubNub のリアルタイム ネットワーク - 高可用性グローバル分散 - ストレージ サービスを使用してメッセージ履歴を保存することもできます。このサービスを使用すると、過去のメッセージ履歴について、最寄りのデータ センターからモバイル/Web クライアント デバイスに直接メッセージを選択的にロードできます。また、Storage Retrieval API を使用してメッセージを独自のサーバーにロードすることもできます。これが次のチャット アプリでどのように機能するかを見てみましょう。

Chat with History JavaScript ソースコード

他のユーザーからメッセージを受信するには、自分のチャンネル名を購読してください。また、以前のチャットから履歴を読み込みます。USER_ID

<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script>(function(){

// INIT
var channel = 'USER_ID-123456';
var pubnub  = PUBNUB.init({
    subscribe_key : 'demo',
    publish_key   : 'demo'
});

// CHAT MESSAGE RECEIVER
function chat(message) {
    // process chat message here...
}

// LOAD HISTORICAL MESSAGES
pubnub.history({
    channel  : channel, // USER_ID Channel
    limit    : 50,      // Load Last 50 Messages
    callback : function(msgs) { pubnub.each( msgs[0], chat ) }
});

// PUBNUB REAL-TIME NETWORK HA-TCP STREAM CONNECTION
// FOR RECEIVING INCOMING CHAT MESSAGES
pubnub.subscribe({
    channel  : channel, // USER_ID Channel
    connect  : connect, // Connected - Ready to Receive Messages
    callback : chat     // Callback Processor
});

})();</script>

これが、モバイル/Web クライアント アプリのチャット アプリの基本です。グローバル プロバイダーとの間でメッセージを簡単にロード/保存できるようになりました。次に、PubNub REST インターフェイスを使用して、PHP からこれらのメッセージをサーバーにロードします。

PHP バックエンドで REST API を介して保存されたメッセージをロードする

REST インターフェイスを使用して、必要に応じて以前に投稿されたメッセージを PHP バックエンド サーバーから収集します。データは PubNub のグローバル リアルタイム ネットワークに保存され、信頼性と高い読み取り/書き込みパフォーマンスのためにメッセージが多くの地理的リージョンにレプリケートされるため、実際にはこの手順は必要ない場合があります。

PubNub Storage/History V2 REST API ドキュメント - https://gist.github.com/stephenlb/d53f4cc3a891c03b478e

REST リクエスト

http://pubsub.pubnub.com/v2/history/sub-key/demo/channel/my_channel?count=5

REST 応答

[["Pub1","Pub2","Pub3","Pub4","Pub5"],13406746729185766,13406746845892666]

PubNub PHP SDKを使用して、いくつかの複雑さを解消することもできます。PubNub PHP SDK はhttps://github.com/pubnub/phpで見つけることができ、次の例で履歴を読み込みます。

<?php
$pubnub = new Pubnub(
    "demo",  ## PUBLISH_KEY
    "demo",  ## SUBSCRIBE_KEY
    "",      ## SECRET_KEY
    false    ## SSL_ON?
);

$history_data = $pubnub->history(array(
    'channel' => $channel,
    'count'   => 100,
    'end'     => "13466530169226760"
));
?>

PubNub のストレージ REST API の詳細

https://gist.github.com/stephenlb/d53f4cc3a891c03b478e - このガイドは、ストレージ REST API に関する追加の詳細に答えるのに役立ちます。

履歴を使用した完全な GUI チャット クライアントの詳細

以下は、開始に役立つグループ チャットです。Bootstrap CSS フレームワークを使用して記述されています - https://github.com/pubnub/real-time-stocks/#simple-embedded-chat-application

于 2013-11-06T23:24:51.653 に答える