mysql - 即时聊天应用检索聊天记录

标签 mysql angular typescript

<分区>

我正在使用 Angular 4 Typescript 和 MySQL 创建一个聊天系统。我可以将消息发布到我的服务器。

但是,我很难理解如何检索数据。当用户订阅聊天 channel 时,我不希望他/她一次收到所有聊天记录。只有最近的。我该怎么做?

最佳答案

首先,您需要服务器与客户端通信而不是 HTTP 轮询。 HTML5 具有服务器发送事件 (SSE),但还有更好的方法。

Websockets 是前进的方向。这样服务器就可以向所有客户端广播新的聊天消息。 npm 的 socket.io 是一个很棒的 websockets 实现。此外,如果 websockets 在浏览器(认为糟糕的浏览器)上不可用,它会回退到 HTTP 轮询,如果失败,它会进一步回退到真正糟糕的浏览器。

很高兴,socket.io hello world 应用程序是一个聊天应用程序。你可以在这里看到它并按照简单的教程 - https://socket.io/get-started/chat/

您可以非常轻松地将 socket.io 集成到 Angular 中。当客户端从服务器接收到事件时,您可以将这些事件发送到 RxJS 主题,任何东西都可以订阅该主题。

请参阅有关使用 RxJS 主题进行组件间通信的 Angular 信息 - https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service

好的,这是简单的部分。在用户加入聊天 channel 之前获取消息怎么样?服务器端,你应该看看消息队列。我在这里不是很有经验,但像 RabbitMQ 这样的技术是你所需要的。应该这样做,但在客户端,我还会看一下 RxJS Replay Subjects(一种不同类型的 Subject),它可以发出订阅前发生的事件。

提示:如果你真的想成为专业人士,你应该使用客户端 Angular 存储,例如 ngrx。这里的免费教程往往是垃圾。我建议投资 Udemy 上的 ngrx 教程。 ngrx 是专业人士使用的。

关于mysql - 即时聊天应用检索聊天记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51663806/

相关文章:

mysql - 重置主键自动增量[第2部分]

php - 从数据库中计算活跃天数

angular - 如何在 keycloak 中设置 CORS 配置以允许 ajax 请求?

angular - 在 Angular 5 中更新数据库后刷新组件

php - 如何使用一个表中的价格数据进行存储在另一个表中的计算?

php - 一些使 AS3 和 ZendAMF 协同工作的帮助

Angular2 在 onDestroy 之前分离 View ?

reactjs - 如何使用 React 和 TypeScript 创建通用箭头函数

mysql - 在 Sequelize 中创建主键和外键关系

Javascript 代码可读性 - 是否拆分成更小的函数?