【发布时间】:2021-07-08 03:20:51
【问题描述】:
我们希望在 Pubnub 上的聊天频道中为消息创建线程。例如,某人可以通过“创建线程”并开始聊天来响应频道中的特定消息。是否有规定的方法来模拟这种行为?如果是这样,您能否参考文档?
这是你在slack中看到的行为,供参考。
【问题讨论】:
标签: pubnub
我们希望在 Pubnub 上的聊天频道中为消息创建线程。例如,某人可以通过“创建线程”并开始聊天来响应频道中的特定消息。是否有规定的方法来模拟这种行为?如果是这样,您能否参考文档?
这是你在slack中看到的行为,供参考。
【问题讨论】:
标签: pubnub
没有针对线程消息传递的现成解决方案。但是,可以通过使用元数据标记它们(使用 PN 对象和/或 MessageActions),然后在您端进行一些编码来维护和处理它们的关系,从而在消息之间建立层次关系。
您可以使用线程第一条消息的时间标记作为键,根据它对消息进行分组,并使用消息自己的时间标记为 UI 生成顺序。
https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#methods
这是执行此操作的高级设计:
chat_11223344 的频道(频道名称使用chat_ 作为所有聊天频道的前缀和生成的ID - 在此处保持简短,但您可以为此使用uuid 生成器)。该发布返回一个发布时间令牌,类似于:16183330926487763。chat_11223344.16183330926487763 的通道,使用顶级消息的发布时间令牌作为“子通道”名称。"isThreaded":true 键/值。【讨论】:
因此,使用 PubNub,您可以将元数据附加到消息本身,或者 PubNub 有一个称为元 (https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#methods) 的部分。
一个示例有效载荷可能是:
{
"type":"message",
"payload":"What do people want for lunch? Pizza?",
"sender":"me",
"sent":1618336638,
"messageActive":true,
"channel":"main",
"messageID":"main.abc123"
}
其中abc123 是引用该消息的uuid。
当有人想线程化消息时,您可以将 "threaded":true 变量附加到对象。
{
...
"messageID":"main.abc123",
"threaded":true,
...
}
现在您的 UI 知道有一个分支线程,使用 main.abc123.thread 作为该特定线程的通道 ID。
然后您的应用订阅新频道main.abc123.thread,您可以使用fetchMessages(); 获取历史消息以及新的实时消息。
【讨论】: