php - PHP & Angular 2 - 带有自己的 API 和数据库的“实时”直接消息传递
问题描述
我已经对实时聊天应用程序等进行了“很多”研究,但我无法真正找到缺失的部分或我应该进入的方向。
我在寻找什么。 两个用户之间的私人直接消息传递系统,无需在固定时间间隔发送获取请求。
我们已经拥有的。 一个完整的 PHP Rest API w/ MySQL,适用于我们的整个应用程序,包括用户、帖子、消息、配置文件……以及整个 Angular 5 客户端应用程序。
当前的消息系统运行在基本的 POST 上以发送消息,并在 GET 上运行以获取新消息(每 30 秒)(当时从来没有实时聊天应用程序的意图)
数据库和 API 方面,两个 UserID 之间存在“对话”,每个对话都包含带有 UserID-from 的消息。
找到的建议:
Sockets(通过 Socket.io 或类似的东西):“问题”是我们的目标是到夏天结束时至少达到 10k+ 用户。如果有 500 多个打开的套接字,套接字可能会破坏我们的服务器或至少我们的 PHP API,还是我弄错了?(我们目前的 GET 情况可能也是如此......)
Firebase:但这有它自己的独立数据库和诸如此类的东西,并且不确定如何将它与我们现有的 API 和身份验证等结合起来。
100 多个主题和情况,这些主题和情况只是一个类似“聊天室”的应用程序,而不是两个注册用户之间的直接消息传递。
我也有想法为消息传递部分创建一个单独的微服务,基于 NodeJS Express 服务器,但话又说回来,客户端需要一个到该服务器的开放套接字,而不仅仅是“一个套接字”,而是一个私有通道只为那两个用户?(然后我将不得不使用一些肮脏的 nodejs-mysql 部分作为用户 ID 和身份验证,而不是在 Mongo 中运行所有内容)
在这一点上..我不确定该朝哪个方向发展以及如何实现这一点,而不必将我们的消息传递数据“提供”给像 Firebase 这样的第三方服务器,或者通过尝试 4-5 种不同的方法来浪费宝贵的时间.
我知道我可能不得不重写整个客户端应用程序消息传递部分,但这是我最不关心的问题。
我应该往哪个方向走,带着什么样的想法?也许有人遇到同样的情况需要转换现有的 datababse-conversation-users-stuffs 应用程序?
解决方案
就像更新一样。我已经实现了整个 Socket 部分并且它运行完美!
目前,我有一个 NodeJS (WebSocket) Socket 服务器正在运行,客户端在启动时连接到该服务器。
PHP API 使用 clientId 和有效负载(不同类型,不同主体,..)向该套接字服务器发送 cURL POST 请求。套接字服务器检查该客户端是否已连接(通过 ID 连接查找数组)并将该消息转发给该客户端。然后客户端处理传入的消息类型以检查使用有效负载执行哪个操作。
在性能方面没有问题或评论。只是一些与套接字服务器连接有问题的 IE 用户的问题。
目前用于实时通知、聊天消息、订阅后更新、..
推荐阅读
- vba - 是否有任何语法可以列出所有行
- java - 运行时的 ClassNotFoundException
- c# - 你能让一个接口的 Moq 模拟通过实现该接口的类型的强制转换和空检查吗?
- circleci - Katalon 命令在 CircleCI 中的 KatalonStudio 泊坞窗图像中不起作用。如何让它发挥作用?
- c - 在 C 中-“一次”多次将值返回给函数
- angular - 如何在Angular中以堆栈方式设置两个模态叠加层的z-index?
- python - 参数的 Python 类型可以是 None
- sql - Microsoft Access 使用选择查询数据更新特定表列
- webpack - 尝试将 webpack 与现有的 angular1 应用程序一起使用
- javascript - Angular 6: ERROR TypeError: "... is not a function" - 但它是