我正在使用Angular 4 Typescript和MySQL创建一个聊天系统。我可以将消息发布到我的服务器。
但是,我很难理解如何检索数据。当用户订阅聊天频道时,我不希望他/她一次收到所有聊天日志。只有最新的。我该怎么做呢?
发布于 2018-08-03 08:50:36
首先,您需要服务器与客户端对话,而不是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主题进行组件间通信的角度信息- https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service
好了,这就是最简单的部分。如果在用户加入聊天频道之前获取消息呢?在服务器端,您应该看看消息队列。我在这里没有太多的经验,但是像RabbitMQ这样的技术人员是你所需要的。这应该可以做到这一点,但在客户端,我也会看看RxJS Replay Subject(一种不同类型的主题),它可以发出订阅之前发生的事件。
提示:如果你真的很专业,你应该使用客户端的角度存储,比如ngrx。这里的免费教程往往是垃圾。我推荐在Udemy上的ngrx教程中进行投资。ngrx是pro的用法。
https://stackoverflow.com/questions/51663806
复制相似问题