我有一个 Python 机器人在 MySQL 上插入消息,我需要创建一个网页来显示消息,这个页面将被大约 10,000 个用户使用,我不能使用请求。
我需要为侦听器 mysql 插入创建脚本 php,每个新插入都显示在 PHP 页面中(无需重新加载页面或其他内容)。我使用 Ajax 创建,每 2 秒发送一次请求,但是,我的 mysql 主机每小时有限制,我需要创建其他解决方案,如 websocket/mysql 侦听器。没有要求。
我创建的最佳解决方案是什么?
这里有几个问题:
MySQL 没有办法让您订阅数据库更改。
PHP 没有中央守护进程来同时向多个访问者发布事件。
每个 PHP 会话都要轮询 MySQL 数据库以获取更改的风险。
我想更好的设计是:
Python Bot -> MySQL
-> Publishing Endpoint -> Redis -> Subscriber Endpoint -> Browser
更简洁的设计会让 Python Bot 只将数据发送到“发布端点”。并拥有“发布端点”来处理 MySQL 存储和 pubsub 操作:
Python Bot -> Publishing Endpoint -> MySQL
-> Redis -> Subscriber Endpoint -> Browser
请注意,这种近乎实时的通信总是需要大量并发连接。 10,000 个并发用户意味着 10,000 个并发连接到您的服务器。
Redis pubsub 在这种规模下应该没问题。但我猜你需要多个 PHP-FPM + Nginx 服务器来处理负载。水平缩放是关键。