2016-08-04 19 views
1

私はgetstream.ioでFacebook反応のようなものを実装しています。 アクティビティの投稿と削除(「反応」)はうまくいきます。Getstream.io:socket/faye経由の削除されたアクティビティのメッセージフォーマット

基礎:

  • リアルタイムでフィードの変更を反映するためにGETSTREAMのソケット機能(フェイ)を実装している間、私は新たな活動のためのソケットメッセージのフォーマットが削除された活動のためのものと異なることがわかりました。削除され、新たに一つの反応をそれぞれ有する

例:

{ 
    "deleted": [ 
    "d5b1aee0-5a1a-11e6-8080-80015eb61bf9", 
    "49864f80-5a19-11e6-8080-80015eb61bf9", 
    "47fe7700-5a19-11e6-8080-80015eb61bf9", 
    "4759ab80-5a19-11e6-8080-80015eb61bf9", 
    "437ce680-5a19-11e6-8080-80015eb61bf9" 
    ], 
    "new": [ 
    { 
     "actor": "user:55d4ab8a11234359b18f06f6:Manuel Reil", 
     "verb": "support", 
     "object": "control:56bf2fb884e5c0756e910755", 
     "target": null, 
     "time": "2016-08-04T11:48:23.168000", 
     "foreign_id": "55d4ab8a11234359b18f06f6:support:56bf2fb884e5c0756e910755", 
     "id": "58d9c000-5a39-11e6-8080-80007c3c41d8", 
     "to": [], 
     "origin": "control:56bf2fb884e5c0756e910755" 
    } 
    ], 
    "published_at": "2016-08-04T11:48:23.546708+00:00" 
} 
  • をIは、フラットフィードを以下凝集フィードを購読。
  • フラットフィードを使用してアクティビティを追加したり削除したりします。
  • フラットフィードと集約フィードの購読は、アクティビティの追加と削除の両方で同じメッセージを返します。

課題私が直面しています:

  • 私は(foreign_id経由)ONEアクティビティを削除する - なぜ削除された配列内の5つのIDを表示されていますか?
  • gestream.ioからソケットメッセージを消化する際に、アプリケーションの変更を反映させるためにforeign_idを設定する必要があります。完全なオブジェクトが送信されるので、これは新しいアクティビティでうまく動作します(上記の例を参照)。ただし、削除されたアクティビティの場合は、idsという配列だけが送信されます。

潜在的なアプローチ:

  • 私は何とか(も)削除された項目についてforeign_idsを返すために、私のGETSTREAMフェイサブスクリプションや設定を設定することはできますか?
  • さらに、ソケットメッセージに基づいてそれらをidsにフェッチしようとすることもできますが、これはほとんどばかげたようです。

ありがとうございました。

答えて

1

foreign_idでアクティビティを削除すると、フィードに指定されたforeign_idを持つすべてのアクティビティが削除されます。これはforeign_idフィールドを使用する際の主な欠点の1つであり、一連のアクティビティへのカスケード削除を可能にします。 (例えば、ポストとリプライは、1つのポストとそれに関連するすべてのリレーションを削除する典型的なユースケースです)。

foreign_idを使用するもう1つの利点は、Streamによって生成されたIDを追跡する必要がないことです。

foreign_idフィールドの値を一意の値(データベースのオブジェクトIDなど)を選択することで、最初の問題を解決することができます。これにより、簡単に削除してカスケードされた削除動作を回避できます。

リアルタイム更新に基づいてUIを更新している場合は、既に同じフィードから読み取ったもので、IDとforeign_idsのアクティビティのリストがあることも意味します。 activity_idからアクティビティを選択することは、ある種のメモリマップを作成するだけです(例えば、data-activity_id属性をDOMに追加するなど)。

+0

スーパークイック回答 - ありがとうございます。広告1)foreign_id経由での削除はクールです。広告2)集計されたフィードを表示しています。したがって、IDはそこでは役に立ちません。しかし、私はフラットフィードも取得し、そこからハッシュマップを構築することができました。あなたは集約されたフィードの場合の良いアイデアを知っていますか? –