ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

系统设计教程示例7:类似WhatsApp的在线消息服务的系统设计

前开发者教程 二月17,2019

在本章中,我们将讨论在线消息服务的系统设计。

WhatsApp与其他消息传递服务有何不同?

在WhatsApp中,文本是端对端加密的。因此,中间服务器无法读取您的消息。
在WhatsApp中,消息存储在服务器中,直到另一方读取消息为止。另一方阅读该消息后,该消息将从服务器中删除。

我们将在本章中讨论的功能是:

1.用户群
2.上次看到
3.发送图像或其他文档之类的媒体
4.加密

考虑到消息传递服务非常受欢迎,许多用户将使用此服务。因此,您需要水平扩展服务器。在水平扩展时,需要一个负载平衡器。

因此,消息将首先使负载均衡器发热,负载均衡器将检查消息将发送到的位置。

我们还需要DB保存消息。

7.1简单通讯如下

系统设计教程示例7:类似WhatsApp的在线消息服务的系统设计

因此,假设用户UserA向UserB发送一条消息,一旦移动设备连接到Internet,该消息就会发送到负载均衡器,然后再发送到Message Server。
然后,消息服务器将检查其他用户(即UserB)是否已连接到该服务。如果已连接UserB,则消息将发送到UserB。如果UserB未连接到服务,则该消息将存储在DB中。
一旦UserB连接到服务器,服务器就会将该消息发送给UserB。

这是一条消息将端到端工作的方式。

7.2了解像上次看到的功能,单勾和双勾会起作用吗?

这些功能可以通过确认服务来完成。

7.2.1单笔交易

一旦来自UserA的消息到达服务器,服务器将发送一条确认消息,说明已收到该消息。然后,UserA将显示单个刻度。

7.2.2双击:

一旦来自服务器的消息通过适当的连接将该消息发送给UserB,则UserB将向服务器发送确认,表明它已接收到该消息。

然后,服务器将向UserA发送另一个确认,因此它将显示双击。

7.2.3蓝勾号:

一旦UserB打开whatsapp并检查了消息,UserB将向服务器发送另一个确认,告知用户已阅读该消息。然后服务器将发送另一个确认消息ti UserA。然后,用户A将显示蓝色勾号。

为了识别所有确认,所有消息都将附加唯一的ID。

7.3上次浏览的功能:

为此,我们需要一种心跳机制。当用户在线或使用应用程序时,此服务将每5秒钟发送一次心跳。
当服务器收到心跳信号时,它将存储在另一个表中,该表具有User_name和最后一次看到的时间。

然后,当UserB联机时检索此信息。

7.4消息服务器的工作

每当与服务器建立连接时,都会创建一个单独的线程以及一个用于存储消息的队列。然后将有一个单独的表,该表将threadID与DeviceID映射。

因此,当收到来自UserA的消息时,如果UserB已连接,则UserA的线程将检查该表。如果已连接UserB,则消息将发送到UserB队列。然后,UserB的线程将检查其队列中是否有任何消息。如果有任何消息,则这些消息将发送到UserB。

如果UserB未连接到服务,则表中没有UserB的条目。当UserA向UserB发送消息时,由于该条目不可用,消息将存储在DB中。 UserB联机后,该消息将被传递。

7.5了解媒体传输的工作原理?

对于发送媒体,我们不能使用以前创建的线程。由于线程重量较轻,因此在同一连接中发送媒体将效率不高。为此,您可以使用HTTP连接将媒体上载到http服务器。然后,该服务器将HashID返回给UserA。然后,我们将HashID以及媒体类型发送给UserB。

收到该消息给UserB后,UserB将从http服务器下载。此过程适用于所有媒体类型。

7.6对于加密,您可以使用

1.在两个客户端之间共享的一个密钥。
2.一个用户将拥有一个私钥,并与其他用户共享公钥。

 

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的
  • <source id="KU46Jx5" class="KIWA4AY"></source>