<分区>
我正在使用 Angular 4 Typescript 和 MySQL 创建一个聊天系统。我可以将消息发布到我的服务器。
但是,我很难理解如何检索数据。当用户订阅聊天 channel 时,我不希望他/她一次收到所有聊天记录。只有最近的。我该怎么做?
<分区>
我正在使用 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/