脚本 PHP 到侦听器 mysql 插入

问题描述 投票:0回答:1

我有一个 Python 机器人在 MySQL 上插入消息,我需要创建一个网页来显示消息,这个页面将被大约 10,000 个用户使用,我不能使用请求。

我需要为侦听器 mysql 插入创建脚本 php,每个新插入都显示在 PHP 页面中(无需重新加载页面或其他内容)。我使用 Ajax 创建,每 2 秒发送一次请求,但是,我的 mysql 主机每小时有限制,我需要创建其他解决方案,如 websocket/mysql 侦听器。没有要求。

我创建的最佳解决方案是什么?

javascript php mysql websocket listener
1个回答
0
投票

这里有几个问题:

  1. MySQL 没有办法让您订阅数据库更改。

  2. PHP 没有中央守护进程来同时向多个访问者发布事件。

每个 PHP 会话都要轮询 MySQL 数据库以获取更改的风险。

我想更好的设计是:

  • 使用 Redis 发布订阅来通知任何数据库更改
  • 让您的 Python 机器人直接通过专用的 PHP“发布端点”发布信号。
  • 所有客户端都可以使用 Server-sent Event 来监听 PHP“订阅者端点”,这将在内部监听 Redis pubsub。
  • 当机器人向发布 PHP 发出信号时,发布端点将查询 MySQL 数据库并将结构化输出发布到 Redis。
  • 收听 Redis pubsub 的“订阅者端点”将获取“发布端点”生成的内容并发送到监听浏览器。
  • 接收到SSE的浏览器可以根据接收到的事件数据更新浏览器
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 服务器来处理负载。水平缩放是关键。

© www.soinside.com 2019 - 2024. All rights reserved.