【发布时间】:2018-06-08 12:06:30
【问题描述】:
我已经“大量”研究了实时聊天应用程序等,但我真的找不到缺失的部分或我应该研究的方向。
我在寻找什么。 两个用户之间的私人直接消息传递系统,无需按固定时间间隔发送获取请求。
我们已经拥有的。 一个完整的带有 MySQL 的 PHP Rest API,用于我们的整个应用程序,包括用户、帖子、消息、配置文件……以及整个 Angular 5 客户端应用程序。
当前的消息系统运行在基本的 POST 上发送消息和 GET 以获取新消息(每 30 秒)(当时从来没有实时聊天应用程序的意图)
在数据库和 API 方面,两个 UserID 之间存在“对话”,每个对话都包含带有 UserID-from 的消息。
找到的建议:
Sockets(通过 Socket.io 或类似的东西):“问题”是我们的目标是到夏天结束时至少达到 10k+ 用户。如果有 500 多个打开的套接字,套接字可能会破坏我们的服务器或至少我们的 PHP API,还是我弄错了? (我们目前的 GET 情况可能也是如此……)
Firebase:但它有自己的独立数据库等等,不知道如何将它与我们现有的 API 和身份验证等结合起来。
100 多个主题和情境,这些主题和情境仅与类似“聊天室”的应用程序有关,而不是关于两个注册用户之间的直接消息传递。
我还想为消息传递部分创建一个单独的微服务,基于 NodeJS Express 服务器,但话又说回来,客户端需要一个到该服务器的开放套接字,而不仅仅是“套接字”,而是只有这两个用户的私人频道? (然后我将不得不为 UserID 和身份验证使用一些肮脏的 nodejs-mysql 部分,而不是在 Mongo 中运行所有东西)
在这一点上.. 我不确定该往哪个方向发展以及如何实现它,而不必将我们的消息传递数据“提供”给 Firebase 等第三方服务器,或者尝试浪费宝贵的时间 4- 5 种不同的方法。
我知道我可能不得不重写整个客户端应用程序消息传递部分,但这是我最不关心的问题。
我应该往哪个方向走,带着什么样的想法?也许有人遇到同样的情况需要转换现有的 datababse-conversation-users-stuffs 应用程序?
【问题讨论】:
-
Socket 很可能是它。到目前为止,这可能是他们最好的用例。为什么你认为这会破坏你的应用程序?
-
当有 200 多个与服务器的打开连接时,我真的找不到性能基准或类似的东西。它“吓到”我,只是关于在客户端和服务器之间持续活跃和打开的连接以及在运行处理大约 1000 多个请求的活动 API 时有 200 多个连接的想法:D 我一直使用“完成时关闭/结束”原则,以防止与服务器或数据库保持打开的连接。
-
最好的基准测试方法是尝试一下。幸运的是,使用某些机器人模拟负载并不难。如果我们都害怕未知,我们会在哪里?
-
您说得有道理,好先生。我目前的思路是让所有请求仍然通过 PHP API 运行,但让套接字通过 NodeJS 处理,以便 PHP 广播到 Node 服务器并更新侦听器(这至少会摆脱定时GET 间隔)。但我将首先尝试仅使用 PHP 套接字并查看/测试性能是什么,以防止复杂性等等。
标签: php mysql angular private messaging