如何在数据库中存储实时聊天消息?

前端之家收集整理的这篇文章主要介绍了如何在数据库中存储实时聊天消息?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在使用 mysqldb作为我的数据库,我需要集成一个实时的消息传递功能. Tornado提供的聊天演示没有实现数据库,(而博客则是这样).

此消息传递服务也将在未来兼作电子邮件(如Facebook的消息服务如何工作.聊天平台也是电子邮件.)无论如何,我想确保我当前的第一个聊天版本能够扩展作为电子邮件,总的来说,我需要将消息存储在数据库中.

这样的事情很简单:对于发送的每条聊天消息,查询数据库并在用户屏幕上显示消息.或者,这种方法是否容易受到高服务器负载和不良优化的影响?我应该如何构建“基础设施”以使其工作?

(我为这个问题中的一些固有的主观性道歉;但是,我更喜欢“测量两次,代码一次.”)

输入,示例和资源受到赞赏.
问候.

解决方法

Tornado是一个单线程非阻塞服务器.

这意味着如果你在主线程上进行任何阻塞调用,你最终会杀死性能.您可能最初没有注意到这一点,因为每个数据库调用可能只会阻塞20ms.但是,一旦您每秒进行超过200次数据库调用,您的应用程序将被有效锁定.

然而,这是相当多的数据库调用.在你的情况下,将有200人在同一秒内点击发送他们的聊天消息.

您可能想要做的是使用具有非阻塞API的队列.所以Tornado会收到一条聊天消息.您将其放入队列以通过其他进程保存到数据库,然后将聊天消息发送回其他聊天成员.

当有人连接到聊天会话时,您还需要向队列发送所有先前消息的请求,当队列响应时,将这些消息发送给新连接的用户.

无论如何,我就是这样解决问题的.

另见这个问题和答案:Any suggestion for using non-blocking MySQL api on Tornado in Python3?

请记住,Tornado是单线程的.太奇妙了.并且可以处理数千个同时连接.但是,如果其中一个连接中的代码阻塞了1秒,那么在该秒期间,任何其他连接都将执行NOTHING else.

猜你在找的MsSQL相关文章