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

基于Vue+Socket.io+Node.js+HAProxy的聊天应用扩容问题求助

Socket.io 聊天应用扩容故障排查方案

一、HAProxy 配置校验

  • 确认HAProxy开启WebSocket支持:Socket.io依赖长连接,需配置option http-server-close、option forwardfor,同时在backend段添加timeout tunnel 3600s维持长连接超时,避免连接被提前断开。
  • 验证负载均衡转发规则:确保/socket.io/路径被正确转发到两个后端节点,通过命令echo "show stat" | socat stdio /var/run/haproxy.sock查看back1、back2的健康状态,确认节点权重、在线状态正常。
  • 检查会话粘滞配置:若使用Socket.io v3以下版本,需配置appsession或cookie实现会话绑定,避免同一客户端被分发到不同节点导致连接异常。

二、Redis 适配器连通性验证

  • 确认后端容器与Redis连通:进入back1、back2容器,执行redis-cli -h <redis容器IP> ping,返回PONG才表示连通正常;若Redis设密码,需追加-a <密码>参数。
  • 核对适配器初始化代码:确保两个节点使用完全一致的Redis配置(地址、端口、数据库编号),适配器实例创建正确,示例代码:
    const { createAdapter } = require('@socket.io/redis-adapter');
    const { createClient } = require('redis');
    
    const pubClient = createClient({ url: 'redis://redis:6379' });
    const subClient = pubClient.duplicate();
    
    Promise.all([pubClient.connect(), subClient.connect()]).then(() => {
      io.adapter(createAdapter(pubClient, subClient));
    });
    
  • 验证Redis消息同步:执行redis-cli monitor观察日志,在一个节点触发Socket.io事件,确认另一个节点能收到Redis转发的pub/sub消息。

三、容器网络与端口配置

  • 检查端口映射冲突:确认back1、back2容器的宿主机端口不重复,或HAProxy直接通过docker内网连接容器端口(无需宿主机映射),避免端口占用导致服务不可用。
  • 测试容器间连通性:在HAProxy容器内执行curl http://back1:3000/socket.io/和curl http://back2:3000/socket.io/,确认两个后端节点的Socket.io服务均能返回包含sid的JSON响应。

四、前端客户端配置校验

  • 确保客户端连接HAProxy地址:前端需指向HAProxy的对外地址,而非单个后端节点,示例代码:
    import { io } from 'socket.io-client';
    const socket = io('http://haproxy-ip:80', {
      transports: ['websocket', 'polling'],
      reconnection: true
    });
    
  • 核对版本兼容性:Socket.io-client与服务端版本必须严格匹配(如v4.x客户端对应v4.x服务端),版本不兼容会导致连接失败但无显性报错。

五、日志排查

  • 查看HAProxy日志:检查/var/log/haproxy.log,搜索backend、disconnect、error关键词,排查转发过程中的异常。
  • 查看后端Node.js日志:进入back1、back2容器,提取应用日志,确认是否存在Redis连接失败、Socket.io初始化异常等信息。
  • 查看Redis日志:检查Redis容器日志,排查连接拒绝、内存不足等问题。

内容的提问来源于stack exchange,提问作者Bedri Yilmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:18:19