所以我试图在 NextJS 中使用 Ably 实现一对一的消息传递,但我无法完成。
我被困在制作互动渠道(例如私人:& lt;user_1 & gt;-& lt;user_2 & gt;)和用户渠道(例如私人:& lt;user_1 & gt;)。
在第二个实现中,我只需要订阅 & lt;user_1 & gt;到他们的频道,但允许其他用户发布到 private:& lt;user_1 & gt;。
简介:在 NextJS 中使用 Ably Realtime 实现一对一消息传递的最佳方式是什么
const {data: session, status} = useSession()
let inputBox = null;
let messageEnd = null;
const [time, setTime] = useState("")
const [messageText, setMessageText] = useState("");
const [receivedMessages, setMessages] = useState([]);
const messageTextIsEmpty = messageText.trim().length === 0;
useEffect(()=>{
console.log(session);
}, [session])
if(status === "authenticated"){
console.log(session.id);
const [channel, ably] = useChannel(`chat:${session.id}`, (message) =>{
console.log(message);
})
}
我试过这个,但很快意识到反应钩的规则使它不可能
抱歉,这是我第一次发布到堆栈溢出
我是 Ably 的开发人员倡导者。这在很大程度上取决于您希望在用户到用户的聊天中执行什么样的操作,您对 # of 频道的限制以及每个用户可以进行多少次并发聊天。
最合乎逻辑的方法是为每个 1 对 1 聊天(所以聊天:user1:user2)有一个通道,因为这保证你有:
2 之间的消息顺序一致
获取历史记录或任何一次对话都很容易,因为它可以通过单个聊天请求获得。通常,聊天作为渠道的逻辑划分使您想要对聊天进行的任何处理都变得简单
但是,如果您打算让每个用户订阅每个 1 对 1 聊天的事件,并且每个用户可能有大量潜在的 1 对 1 聊天,则可以开始关注一些问题:
如果你说每个用户平均有 50 个 1 对 1 的聊天,随着越来越多的用户加入聊天,这将开始迅速增加
如果任何用户都有可能向您平台上的任何其他用户发送消息,并且可能有成千上万的用户,则您需要一种方法让客户端知道要订阅哪些渠道来接收消息。然后,这将成为一个整体的考验,然后生成元信息以确定哪些渠道处于活动状态,他们应该订阅哪些渠道,以及何时取消订阅渠道以避免过多使用渠道
一旦你想要这样的规模,它可能是值得考虑有一个用户通道,其他用户发布到与他们沟通(说聊天:user1)。如果说所有其他用户被授予只发布权限使用聊天:* 命名空间一般,但给予所有需要的权限,他们的聊天(聊天:user1),那么你可以允许任何用户消息的任何其他用户没有他们能够查看别人的消息说用户。
通常,就渠道数量而言,这很有帮助,因为 1 对 1 对话的渠道数量限制为活动用户的总数
很容易确保任何 1 个用户都订阅了他们应该订阅的所有频道,因为他们只需要订阅自己的频道
这里的问题是,您需要创建一些功能来重现通常固有的 Ably 功能,例如获取对话的历史记录。由于您无法访问另一个用户的聊天频道,因此您需要一些方法来使您发送的消息对自己可用。
这是建议真正取决于您自己的聊天需求的地方。如果是短暂的,则可能只需将其存储在本地即可。如果您已经将较长期的历史记录存储在某个服务器上,则可以将其用于一般历史记录请求。如果您需要在 Ably 中提供它,则还可以有一个单独的通道(例如 chat:user1:my_sent_messages),当您收到这些消息时,您也可以将其
总的来说,如果你打算扩大规模,我可能会建议每个人都发布每个用户的渠道来与他们沟通,但你可以根据你的具体需求进行合并。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(23条)