文档首页/ 弹性负载均衡 ELB/ 最佳实践/ 高级功能/ ELB使用WebSocket协议实现聊天信息实时交互
更新时间:2025-08-25 GMT+08:00
分享

ELB使用WebSocket协议实现聊天信息实时交互

WebSocket协议是一种在单个TCP连接上进行全双工通信的网络协议。WebSocket协议通信下,服务器可以主动向客户端发送数据,使得客户端和服务器之间的连接更持久,数据交换更简单,通信过程更高效。应用型ELB默认支持WebSocket协议,可以帮助您对需要实时通信的业务进行负载。

Websocket协议概述

  • 什么是Websocket协议

    当前Web应用场景日渐丰富多样,对通信技术的要求也更高。例如实时社交、协同办公、在线客服通知等功能要求服务器能够实时推送数据。采用轮询技术的传统方案,即客户端在固定时间间隔内向服务器发送请求以获取最新数据,在以上场景存在明显缺陷。如果客户端需要频繁发送请求,而HTTP头字段信息冗长,会导致有效数据信息占比低、带宽资源浪费并增加服务器的压力。

    为了适应以上业务场景需求,HTML5引入支持了WebSocket协议。在全双工通信下,服务器和客户端能同时收发数据,服务器可以主动推送新数据,减少客户端的询问请求。这种双向通信机制有效减少通信冗余,提升了实时业务体验,还可以帮助您节省服务器资源和带宽资源。

    更多关于WebSocket协议的详细信息,您参考官方文档The WebSocket Protocol

    ELB的HTTP/HTTPS监听默认支持WebSocket协议

  • Websocket协议适用场景

    Websocket协议的核心优势为全双工实时通信,广泛应用于需要高频交互低延迟的业务场景。

    • 实时社交与互动:在线聊天室、直播弹幕、多人在线棋牌类游戏等需要不同玩家的状态同步。
    • 协同办公与在线教育:多人文档在线编辑、在线课堂互动等需要结果共享。
    • 地图导航:交通导航中乘客位置变化和主动推送拥堵情况。
    • 客服与通知:用户与客服之间即时信息互通。

实践方案架构

图1 客户端通过ELB访问Websocket应用程序

本实践方案提供一个简易的聊天信息实时交互示例如下:客户端向服务器端发送请求,服务器端进行响应,客户端接收响应后发送新的请求,服务器端再次响应的实时交互。

准备工作

  • 创建独享型ELB实例,并选择了应用型规格实例,且ELB已绑定EIP。具体操作,请参见购买独享型负载均衡器绑定IPv4公网IP
  • 创建两台ECS,ECS与已创建的ELB实例属于同一个VPC,更多详细设置请参考快速创建ECS,本实践方案以ECS安装CentOS系统为例。第一台ECS_client用作客户端发送HTTP请求,第二台ECS_server用作部署WebSocket应用的后端服务器。

步骤一:在后端服务器中部署WebSocket应用

  1. 远程登录后端服务器ECS_server。

    弹性云服务器有多种登录方法,具体请参见登录弹性云服务器

  2. 执行以下命令确保服务器端的python版本不低于python 3.7。
    yum install python39
  3. websockets 库提供了简洁的 API,使得在 Python 中建立 WebSocket 连接变得容易,执行以下命令安装最新版websockets库。
    1. 安装Python包管理工具pip。
      sudo yum install python3-pip
    2. 安装WebSocket
      pip install websockets
  4. 在后端服务器中,新建目录websocket。
    mkdir websocket
  5. 在websocket目录下,新建一个websocket_server.py文件,并且在其中部署测试websocket应用服务。
    1. 新建websocket_server.py文件。
      vi websocket_server.py
    2. i键进入编辑模式。
  6. Esc键,输入:wq保存websocket_server.py文件。
  7. 运行websocket_server.py文件。
    python3 websocket_server.py
  8. 收到如图2的回显,表示WebSocket应用部署成功。
    图2 WebSocket应用部署成功

步骤二:在客户端中部署WebSocket应用

  1. 远程登录客户端ECS_client。

    弹性云服务器有多种登录方法,具体请参见登录弹性云服务器

  2. 执行以下命令确保客户端的python版本不低于python 3.7。
    yum install python39
  3. 执行以下命令在客户端中安装最新版websockets库。
    1. 安装Python包管理工具pip。
      sudo yum install python3-pip
    2. 安装WebSocket
      pip install websockets
  4. 在客户端服务器中,新建目录websocket_client。
    mkdir websocket_client
  5. 在websocket目录下,新建一个websocket_client.py文件,并且在其中部署websocket应用服务。
    1. 新建websocket_client.py文件。
      vi websocket_client.py
    2. i键进入编辑模式。
  6. Esc键,输入:wq保存websocket_client.py文件。

步骤三:创建HTTP后端服务器组并添加后端服务器

  1. 进入后端服务器组列表页面
  2. 在后端服务器列表页面,单击页面右上角“创建后端服务器组”按钮。
  3. 在配置后端分配策略页面,选择将后端服务器组Server_Group关联至已经创建完成的ELB实例,后端协议选择“HTTP”。
  4. 其余设置保持默认,单击“下一步”。
  5. 在添加后端服务器页面,云服务器页签下,单击“添加云服务器”。
  6. 在添加后端服务器侧拉窗中,选择ECS_server,并设置业务端口为8081。
  7. 单击“下一步”后确认配置信息。
  8. 单击“立即创建”。

步骤四:创建HTTP监听器并选择后端服务器组

  1. 进入弹性负载均衡列表页面
  2. 在目标弹性负载均衡实例的操作列,单击“添加监听器”。
  3. 在添加监听器页面,协议类型选择“HTTP”,端口设置为“8081”。
    图3 添加HTTP监听器
  4. 单击“下一步:配置后端分配策略”,后端服务器组参数选择“使用已有”。选择步骤三创建完成的服务器组Server_Group,完成后单击“下一步:确认配置”。
  5. 确认配置参数后,单击“提交”,完成HTTP监听器的创建。

步骤五:验证结果

  1. 远程登录客户端ECS_client。
  2. 运行代码python websocket_client.py文件。
    python3 websocket_client.py
  3. 看到客户端和后端服务器相继打印“Sent: Hello server, this is client!”和“Received: Hello client, this is server!”,验证了ELB通过WebSocket协议实现了实时聊天。
    图4 ELB通过WebSocket协议实现了实时聊天。

相关文档