发送消息请求

时间:2018-08-17 13:03:58

标签: javascript node.js sockets socket.io

我正在使用 Socket.IO Node.JS 创建聊天应用程序。我想实现消息请求,例如Facebook's Messenger的消息请求。我不确定该怎么解决。

如果 Mike 要发送私人消息给 Jake ,则 Jake 必须首先接受 Mike 的消息请求。假设 Mike 使用 Socket.IO 连接到服务器,然后服务器处理他的请求。然后,Mike可以将套接字发送到服务器,例如,聊天套接字,例如以下内容:

socket.emit( 'chat', { // Emits the 'chat' socket to the server
    name: 'Mike', // Sets the name of the sender
    receiver: 'Jake', // Sets the name of the receiver
    message: 'Hey Jake!' // Sets the message
} );

现在,很明显,应该仅在如果有任何 Jake 已接受消息请求的情况下发送此套接字。这就是问题所在。
消息请求存储在数据库中(这对于我的应用程序是必需的)。

关于如何完成此操作,我有一些想法:

    每次用户发送聊天套接字时,
  1. 查询数据库,以查看接收者是否接受了发送者的请求。当然,这意味着每次发送聊天时,我都有一个数据库查询。对我来说,这似乎高度是无效的。
  2. 以某种方式查询数据库,并且允许聊天消息通过而无需每次都不发出数据库查询-尽管我 不确定如何完成此操作-因此是这个问题。

对于您在此问题上的投入,我们深表感谢。谢谢!

2 个答案:

答案 0 :(得分:0)

您提到的请求是,请求接受应该只发生一次,就像在Facebook中一样,或者应该对所有发送的消息都接受它。

我希望发送第一条消息只是一次。如果是这种情况,则可以使用包含Jake的朋友(Jake接受的人)的数组创建JSON文件。每当有人尝试向Jake发送消息时,您只需参考JSON文件Jake的数组以查看发件人是否在数组列表中。如果是,则可以继续向Jake广播消息。如果不在数组中,请向发送方(迈克)发送Jake连接请求。

由于您将消息请求存储在数据库中,因此当某个新连接请求被某人接受时,请更新JSON文件数组。

希望这对您有所帮助。如果我不在您的讨论范围内,请在下面评论。

答案 1 :(得分:0)

有多种方法。

1)您可以完成缓存(如@ PM-77-1所述),这有助于减少数据库查询的数量。 Redis缓存真的很容易与Node.js一起使用。因此,每当您尝试检查Mike是否将Jake当作朋友时,都可以首先在缓存级别检查Jake是否在Mike的朋友列表中。如果没有Mike的朋友列表,则可以一次从db获取它,并将其存储在缓存中以备将来使用。

2)您还可以允许用户(Mike)发送大约100到200条短消息(仅作为示例),消息对于Jake都是隐藏的,直到Jake接受Mike的请求为止。对Mike可以在不成为朋友的情况下发送的消息数量进行限制是一个主观的问题,它取决于应用程序的知名度。

相关问题