Getstream.io:通过socket / faye

时间:2016-08-04 13:08:23

标签: websocket faye getstream-io

我正在通过getstream.io实现类似Facebook的反应。 发布和删除活动("反应")运行正常。

基础:

  • 在实现getstream的套接字功能(faye)以实时反映Feed更改时,我看到新活动的套接字消息格式与已删除活动的格式不同。

已删除和新的一个反应的示例:

{
  "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"
}
  • 我订阅了平展Feed后的聚合 Feed。
  • 我通过平面Feed添加和删除活动。
  • 在添加和删除活动时,对广告和聚合Feed的订阅都会返回相同的消息。

我面临的挑战:

  • 当我删除一项活动(通过foreign_id)时 - 为什么在已删除的数组中出现5个ID?
  • 我需要让foreign_id反映应用程序中的更改,同时从gestream.io中消化套接字消息。当发送完整对象时,这适用于新活动(参见上面的示例)。但是,对于已删除的活动,它们会丢失,因为只发送了一个ids数组。

潜在方法:

  • 我可以以某种方式配置我的getstream faye订阅或配置(还)为已删除的项目返回foreign_ids吗?
  • 我可以尝试根据套接字消息再次获取ids,但这看起来几乎是荒谬的。

非常感谢。

1 个答案:

答案 0 :(得分:1)

通过foreign_id删除活动会删除Feed中存在给定foreign_id的所有活动。这是使用foreign_id字段的主要优点之一,它允许级联删除一组活动。 (例如,帖子和喜欢是一个典型的用例,你想要删除一个帖子以及与之相关的所有喜欢。)

使用foreign_id的另一个好处是您不必跟踪Stream生成的ID。

您应该能够通过选择唯一的foreign_id字段的值来解决您的第一个问题(例如,数据库中的对象ID),这样您仍然可以轻松删除并避免级联删除行为。

关于您的第二个问题,如果您根据实时更新更新UI,则表示您已经从同一个Feed中读取,并且您拥有带有ID和foreign_ids的活动列表。从activity_id中选择活动应该只是创建某种内存映射(例如,向DOM添加data-activity_id属性)。