如何在消息传递应用程序中将一条消息同时发送给几个朋友?我在Django问题中读到,这种设计是M2M关系。您定义了两个模型(User和SentMessage),后端创建了第三个对象?
例如,微信和Facebook Messenger允许您选择多个朋友并同时向他们发送一条消息。在iOS,Parse或您自己的Node.js后端中如何完成?
您定义自己的课程。
user["username"] = String
user["sex"] = String
user["age"] = Int
///
let messageObj = PFObject(className: "Messages")
messageObj["sender"] = PFUser.current()?.username
messageObj["message"] = messageTextView.text
messageObj["likes"] = [String]()
您如何允许将消息发送到:
A.同时所有用户。
B.具有特定属性的用户,例如[“年龄”]或[“性别”]。
随时为其他服务器提供解决方案。
答案 0 :(得分:1)
在Firebase中,您也使用第三个“表”对多对多关系进行建模,在该表中,您将实体1的项目连接到实体2的项目。有关更多信息,请参见Many to Many relationship in Firebase
但是对于聊天应用程序,我通常会对该用例进行不同的建模。向一组用户发送消息通常会在这些应用程序中启动一个临时聊天室。如果其中一个用户回答,则该回答将发送给该组中的其他所有人。因此,您实际上已经启动了一个临时聊天室,该聊天室由其中的人标识。
我通常建议以参与者的身份在Firebase中命名此临时聊天室。有关更多信息,请参见:http://stackoverflow.com/questions/33540479/best-way-to-manage-chat-channels-in-firebase。在这种模式下,如果您和我开始聊天,我们的房间将是:uidOfMat_uidOfPuf
。因此,我们的JSON如下所示:
chats: {
"uidOfMat_uidOfPuf": {
-Labcdefgh1: {
sender: "uidOfMat",
text: "How is a single message sent to several friends simultaneously in messaging applications?"
}
-Labcdefgh2: {
sender: "uidOfPuf",
text: "In Firebase you model many-to-many relationships with a third "table" too..."
}
由于聊天室是由参与者定义的,因此无论您和我何时聊天,我们最终都将位于同一聊天室中。很方便!
现在说,我要求某人帮助,通过将他们拉入聊天室来回答您的问题。由于聊天室是由其参与者定义的,因此添加新参与者将创建一个新的聊天室:uidOfMat_uidOfPuf_uidOfThird
。所以我们最终得到:
chats
uidOfMat_uidOfPuf
-Labcdefgh1: {
sender: "uidOfMat",
text: "How is a single message sent to several friends simultaneously in messaging applications?"
}
-Labcdefgh2: {
sender: "uidOfPuf",
text: "In Firebase you model many-to-many relationships with a third "table" too..."
}
}
"uidOfMat_uidOfPuf_uidOfThird": {
-Labcdefgh3: {
sender: "uidOfPuf",
text: "Hey Third. Puf here. Mat is wondering how to send a single message to several friends simultaneously in messaging applications. Do you have an idea?"
}
-Labcdefgh4: {
sender: "uidOfThird",
text: "Yo puf. Long time no see. Let me think for a moment..."
}
这里需要注意的几件事:
在到目前为止使用的模型中,如果我们将另一个人添加到uidOfMat_uidOfPuf_uidOfThird
聊天室中,则会再次创建一个新的聊天室。
许多聊天应用程序为您提供了命名群组聊天室的选项。在许多情况下,将用户添加到这样的命名聊天室确实可以使他们访问消息历史记录。我倾向于将这些房间称为永久聊天室,因为它们可以访问历史聊天消息。
在上面的示例中,假设我们将1:1房间命名为“ model_chat_room”。这意味着将第三人添加到会议室中,将使他们能够立即访问我们的消息历史记录。
一方面很方便,因为我不必重复您的问题。另一方面,Matt还可以查看我们的整个对话历史。许多人认为1:1聊天对话是私人的,这就是为什么只有在3个或更多参与者的情况下进行命名聊天才通常使用“持久聊天室”模型的原因。