You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Reactjs中从MySQL数据库获取实时数据且无需刷新应用

技术实现方案

结合你现有技术栈(React前端、Erlang后端、MySQL存储)和10k级用户量的情况,优先采用WebSocket长连接方案实现实时数据推送,改造成本最低、性能表现最优,具体实现逻辑如下:

后端Erlang侧实现

  • 长连接管理:直接引入Erlang生态的cowboy框架的WebSocket Handler,用户登录成功后建立专属WebSocket长连接,用Erlang原生ETS表存储在线用户的连接PID、用户ID、最新活跃时间等元数据,10k级并发长连接对Erlang来说无额外性能压力,单节点即可承载。
  • 数据变更推送:
    • 轻量方案(无侵入现有业务):引入MySQL Binlog解析工具(Erlang生态有成熟的开源实现),监听用户状态表、消息表的行级变更事件,过滤出有效变更后推送给对应用户的WebSocket连接。
    • 简单方案(少量侵入业务):在现有用户状态变更、消息发送的业务逻辑中加钩子,写完MySQL后直接触发推送逻辑,给关联用户(状态变更的对应好友、消息接收方)推增量变更通知。
  • 在线状态校验:设置30s一次的WebSocket心跳检测,超时未返回心跳响应的连接直接断开,更新ETS表和MySQL中的用户状态,同时给该用户的关联对象推离线通知。

前端React侧实现

  • 长连接初始化:用原生WebSocketAPI或socket.io-client库发起连接请求,请求头携带登录态token做鉴权,避免非法接入。
  • 事件处理逻辑:监听后端推送的不同类型事件,比如user_status_update(用户状态变更)、new_message_notice(新消息通知),收到事件后直接更新React状态(无论你用原生Hooks、Redux还是其他状态管理库都可适配),无需刷新页面即可实现实时渲染。
  • 异常兼容逻辑:加断线自动重连逻辑,连接断开后最多重试5次,重试间隔按指数级递增,避免给服务器造成额外压力;重连成功后传递本地最新的事件序列号,拉取离线期间的增量数据做状态同步,保证前后端数据一致。

初始数据同步逻辑

用户刚登录时先调用现有接口拉取全量的好友状态、最新消息列表做初始化,后续所有数据变更完全依赖WebSocket推送增量更新,不需要做接口轮询,大幅降低服务器负载。

补充说明:如果后续用户量级上涨到10万以上,可以给WebSocket服务做集群部署,引入Redis做跨节点的消息广播即可,当前10k量级不需要额外增加架构复杂度。

内容的提问来源于stack exchange,提问作者Puneet biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:45:00