2016-12-06 4 views
0

私はフロントエンドとしてポリマーを使ったノードアプリケーションを持っています。このアプリケーションは、HTTP2などを使ってHTTPなどを処理するnginxリバースプロキシの背後で実行されます。私は署名されたクッキーでクッキーセッションを使用しています。ポリマーとノードを使ったリアルタイムチャットアプリ

これで、アプリに「リアルタイムチャット」を追加する必要があります。私は2016年にそれが簡単だと思った...少年は私が間違っていた。

私の最初の呼び出し先はPrimusでした。しかし、あまり得意でないものがあります。

  • ノードサーバーを再起動するとどうなりますか?すべてのクライアントが再接続する必要がありますか?
  • クライアントは、特定のイベントタイプ(Primus/Websockets/etcを介して受信するはずです)に「登録」することができます。したがって、開いている「タブ」ごとに独自のIDが必要です。サーバーが再起動され、クライアントが再接続した場合、サーバーは「サブスクリプション」のリストを再利用できますか? (これは同じ「ID」を持っているクライアントが必要です)

は、このすべての標準溶液は、私は認識していないだということはありますか?

答えて

0

最近私はチャットプロジェクトで働いていましたが、クライアント側でもPolymerを使用しました。

サーバー側では、私がしたようにFeathersを使用できます。基本的にFeathersは、Expressのミニマリストラッパーで、WebsocketとSocket.IOをリアルタイムコミュニケーションのフードとして使用しています。それは本当にうまくいきます。接続の作成やすべてのことを心配する必要はありません。また、クライアントサイドのJSライブラリがあり、Polymerコンポーネントを簡単にラップすることができます。

ノードサーバーを再起動するとどうなりますか?すべてのクライアントが再接続する必要がありますか?

答えははいです。自動的に再接続します。

クライアントは、特定のイベントタイプに「登録」することができます(その後、プライマス/ WebSocketを/などを経由して受信することになっています。)ので、それぞれが「タブ」は、自身のIDが必要になります開いた...

あなたのFeathersアプリのデザイン方法はあなた次第です。あなたが理解しているように、あなたは異なる人や複数の人々とこれらのタブを持っているFacebookのようなものが欲しい。このため

、Iは主従データ構造を使用する:

会話(1)···(N)メッセージ

例:

会話

{ 
    "doc_created_at": "2016-09-21T07:30:02.289Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_patched_at": "2016-10-27T11:35:53.599Z", 
    "doc_type": "conversation", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "last_message": "How are you?" 
} 

メッセージ#1

{ 
    "conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_created_at": "2016-09-23T06:10:28.727Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "00e5b904-c9fa-46f1-b108-9fc9a15d11fc", 
    "doc_type": "message", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "message": "Hi" 
} 

メッセージ#2

{ 
    "conversation_id": "00f61c96-4bc6-4c46-a22d-de246314695c", 
    "doc_created_at": "2016-09-21T07:32:08.312Z", 
    "doc_created_by": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "doc_id": "2a6c2f91-04a8-4447-a0a6-4b229d523afc", 
    "doc_type": "message", 
    "participants": [ 
    { 
     "id": "635b05bc-ae23-4c5d-9ee5-87e7da2cac15", 
     "name": "User 1" 
    }, 
    { 
     "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
     "name": "User 2" 
    } 
    ], 
    "sender": { 
    "id": "299009a4-5423-4cdd-9e1a-59fca59404ae", 
    "name": "User 2" 
    }, 
    "message": "How are you?" 
} 

Iは、データベース(Couchbase)、これらの情報を記憶します。

+0

詳細が必要な場合はお知らせください。 – Hunex

+0

可能な唯一の純粋な答えであるので、この回答を受け入れてください。しかし、私は[自分のサーバーコード](https://github.com/mercmobily/hotplate/blob/master/core_modules/hotCoreComet/lib/hotCoreComet.js)と[自分のクライアントライブラリ](https: /github.com/mercmobily/hotplate/blob/master/core_modules/hotCoreComet/lib/comet-client.js)、クライアントライブラリを3つのポリマーウィジェットでラップしました... – Merc

関連する問題