首页 > 解决方案 > 即时聊天应用程序检索聊天记录

问题描述

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

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

标签: mysqlangulartypescript

解决方案


首先,您需要服务器与客户端对话,而不是 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

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

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


推荐阅读