-->

如何存储在数据库中的实时聊天消息?(How to store real-time chat mess

2019-08-17 15:41发布

我使用mysqldb为我的数据库目前,我需要集成通讯功能,是实时的。 该chat demo的是龙卷风提供实现的数据库,(而blog 一样 。)

该消息传递服务也也将增加一倍,在未来的电子邮件(如Facebook的消息服务是如何工作的。聊天平台也就是电子邮件。)无论如何,我想确保我的当前,第一次聊天的版本将能够扩大以用作电子邮件,和整体,我需要存储在数据库中的消息。

是这样的简单:每发送聊天消息,查询数据库,并显示在用户的屏幕上的信息。 或者说,是这种方法容易出现高服务器负载和优化穷受苦? 我究竟是如何结构中的“基础设施”,使这项工作?

(我对一些在这个问题上所固有的主观道歉,但是,我更喜欢“一次测量两次,代码”。)

输入,实施例和资源赞赏。
问候。

Answer 1:

龙卷风是单线程非阻塞服务器。

这意味着,如果你让主线程上的任何阻塞调用你最终会杀死的性能。 你可能不是第一次注意到这一点,因为每个数据库调用可能只阻塞20毫秒。 但是,一旦你正在每秒超过200个数据库调用你的应用将有效地锁定。

然而这是相当多的DB调用。 你的情况,这将是200人击中同一秒对他们的聊天信息发送。

你可能想要做的是使用队列非阻塞API。 所以龙卷风接收聊天消息。 你把它给被其他进程保存到数据库的队列中,那么你发送聊天消息发送回出到其他聊天成员。

当有人连接到聊天会话,你还需要在队列回应你把那些关闭的新连接的用户发送关闭的队列中的请求,所有以前的消息。

这就是我无论如何都会处理这个问题。

也看到了这个问题,并回答: 在Python3使用的龙卷风非阻塞的MySQL API的任何建议?

只记得,龙卷风是单线程的。 太奇妙了。 并能处理数以千计的并发连接。 但是,如果在1秒钟的连接块的一个代码,然后什么都没要为第二期间的任何其他连接来完成。



文章来源: How to store real-time chat messages in database?