私は最近、チャット プロジェクトに取り組み、クライアント側でも Polymer を使用しました。
サーバー側では、私のようにFeathersを使用できます。基本的に、Feathers はExpressの最小限のラッパーであり、リアルタイム通信のために内部でWebsockets とSocket.IOを使用します。これは非常にうまく機能します。接続の作成などについて心配する必要はありません。また、Polymer コンポーネントに簡単にラップできるクライアント側の JS ライブラリもあります。
ノードサーバーを再起動するとどうなりますか? すべてのクライアントを再接続する必要がありますか?
答えはイエスです。自動的に再接続されます。
クライアントは特定のイベント タイプに「登録」できます (Primus/Websockets などを介して受信することになっています)。そのため、開かれた各「タブ」には独自の ID が必要です ...
Feathers アプリをどのように設計するかは、あなた次第です。私が理解しているように、あなたはFacebookのようなものを望んでいます。そこでは、これらのタブにさまざまな人または複数の人がいます。
このために、マスター/ディテール データ構造を使用しました。
会話 (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?"
}
これらの情報をデータベース ( Couchbase ) に保存しました。