mysql - 即时聊天应用程序检索聊天记录
问题描述
我正在使用 Angular 4 Typescript 和 MySQL 创建聊天系统。我可以将消息发布到我的服务器。
但是,我很难理解如何检索数据。当用户订阅聊天频道时,我不希望他/她一次收到所有聊天日志。只有最近的。我该怎么办?
解决方案
首先,您需要服务器与客户端对话,而不是 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 是专业人士的用途。
推荐阅读
- python - 仅当内部有特定标签时如何解析xml
- android - 如何将 Anko DSL 布局转换为 XML?
- java - 读取excel文件字节数组
- scala - flink FoldingStateDescriptor 已弃用消息
- xml - PLSQL:将 CLOB 转换为 XML
- python - 如何将 API 响应与 Robot Framework 中的数据库查询结果进行比较
- swift - 如何使用 RxSwift 观察 UITextField 中的输入变化?
- python-3.x - 如何通过比较两列对数据框进行排序
- reactjs - reactjs中Web应用程序的三点更多选项菜单的逻辑
- javascript - 提供给叠加层的“数组”类型的无效道具“孩子”。预期单个反应元素