端游广播机制在阿里云的配置方案

简介: 原作者:阿里云解决方案架构师,爅冉。对于重度网络通信依赖的端游,怎样在阿里云上配置UDP广播机制,可以在本文中找到答案。

1. 客户需求场景

对于传统端游来说,后台服务端架构通常都很复杂,各个服务器之间需要进行重度的网络通信。如果采用单播通信,就需要服务器随时知晓其他服务器的变动,整个架构往往变得十分笨重。出于对开发灵活性和节省主机计算资源的考虑,目前很多端游各个服务器之间仍然在使用udp广播通信。

2. 基本原理

在目前阿里云的经典网络和VPC网络环境下,由于底层交换机使用了三层交换机,因此不支持二层组播和广播。为了满足客户组播和广播的需求,可以使用单播的方式模拟组播。基本实现原理如下图:

b697ea3f7f133ee0a5656ac4d8f7d38a2e48dc8e

3. Windows环境配置

Windows环境下,多播工具包括服务端udptopoint和客户端udptomulti,服务端安装在需要发送多播数据包的ECS上,客户端安装在需要接收多播数据包的ECS上。

3.1 安装

Windows多播代理程序通过安装包来安装。双击udptopoint-1.3.1.exeudptomulti-1.1.1.exe安装包程序来安装,按照提示来安装。安安装目录:C:\udptopoint 和 C:\udptomulti。

4638bed9b14396847bbae4e188aeb2b53f0854fc

f5ef3dbe0194ce8a3835c4b9059b17c192de947b

安装说明:

1.     在安装过程中如果检测到winpcap已经安装,直接取消安装便可,也可继续覆盖安装。

2.     如果没有安装winpcap,则需要点击安装,如下图所示:

d5694d1a07f076c63e44c009087f9b66d048d754

3.2 配置

3.2.1 服务端配置

当组播工具安装成功后,运行udptopoint.exe,将会自动执行多播转单播的后台服务,在任务管理器->服务 里可以看到当前服务运行状态。

服务端需要配置多播组以及添加对应的多播成员。主要通过配置文件的形式进行配置。配置文件名称为server_cfg.json.txt。配置文件的格式如下所示:

服务端配置文件格式:

{

  "multi_group_array":[

    {

      "group_ip":"224.2.2.1",

      "group_port":4321,

      "server_port":4322,

      "member_array":[

        "172.16.1.1",

        "172.16.1.2",

        "172.16.1.3"

      ]

    }

  ]

}

说明:group_ip:多播组IP。

group_port:多播组端口,即在服务器端发起的多播端口。

server_port:代理程序的通信端口,即将多播转换成单播使用的端口。

member_array:多播组的成员IP。

服务端辅助工具——send_reload_point_cfg:

目前支持的命令为reload和list命令。

reload命令作用:重新加载配置文件。每当重新修改配置文件后,都需要执行该命令重新加载配置文件。

list命令作用:显示当前代理系统的收发包情况。

使用方法:

终端输入reload或者list命令。

79e51cd91a598d1d6941bdb2e5c00ccdc0a83e00

3.2.2  客户端配置

当组播工具安装成功后,运行udptomulti.exe,将会自动执行多播转单播的后台服务,在任务管理器->服务 里可以看到当前服务运行状态。

客户端需要配置加入的多播组信息,主要通过配置文件中的json数组进行配置,配置文件名称为client_cfg.json.txt。配置文件的格式如下:

客户端配置文件格式:

{

    "multi_server_info_array":[

    {

    "server_ip":"10.65.251.14",

    "server_port":6000,

        "group_ip":"192.168.1.255",

        "group_port":6001

    }

  ]

}

说明:

  server_ip: 发送多播数据的源IP。

  server_port: 代理程序的通信端口,即单播使用的端口。

  group_ip: 多播组IP。即在接受消息后如果需要模拟的多播组IP。

  group_port: 应用程序的通信端口。即在接收消息后需要模拟的多播组端口。

客户端辅助工具——send_reload_multi_cfg:

目前支持的命令为reload和list命令。

reload命令作用:重新加载配置文件。每当重新修改配置文件后,都需要执行该命令重新加载配置文件。

List命令作用:显示当前代理系统的收发包情况。

4. Linux环境配置

4.1 安装

Linux用户组播工具服务器和客户端都打包成了一个主RPM包。目前提供的rpm包是:multicast_usr_tool-1.0.1-1.x86_64.rpm, 版本为1.0.1。安装方法如下:

sudo rpm -ivh multicast_usr_tool-1.0.3-1.el6.x86_64.rpm

可用rpm -q multicast_usr_tool-1.0.3-1.el6.x86_64 查询rpm包是否安装成功。成功安装rpm包后,会自动将用户态组播工具的服务器端程序和客户端程序安装到系统中。

4.2 配置

组播工具安装成功后,客户端启动程序安装目录为/usr/local/bin,配置文件目录为/etc/multicast/

首先利用 cd /usr/local/bin 命令进入到客户端所在目录,

执行source ~/.bashrc

启动: 

   客户端:

手动启动:(root权限)

 nohup multic_admin -R > /dev/null &                          

   服务端:

启动: (root权限)

service multis_monitord start

停止:

   客户端:

手动停止:ps aux|grep multic_admin找到运行进程的pid, 然后kill pid

   服务器:

root权限 service multis_monitord stop

查看运行状态:

    service multis_monitord status

5. 使用案例

d08b6033998fb724ac9c4d6218afa93691e181fc
如上图所示,ECS1为组播源,ECS2, ECS3和ECS4为组播成员,组播IP地址和端口分别为224.1.2.3:7134。此时ECS1上需要安装运行组播服务端,ECS2,ECS3和ECS4分别安装运行组播客户端。操作步骤如下:
Windows下修改udptopoint文件夹下server_cfg.json.txt文件,Linux下修改/etc/multicast/server_cfg.json.txt文件,配置如下:
{
    "multi_group_array": [
        {
"group_ip": "224.1.2.3",
"server_port": 7134,
            "group_port": 7134,
            "member_array": [
                "192.168.1.1",
                "192.168.1.2",
                "192.168.1.3"
            ],
        }
    ]
}
修改后需要用reload工具加载到当前运行的服务器程序中:
Linux下运行:
    server_reload_list
please input command[reload or list]#reload
Windows下运行:
send_reload_point_cfg
please input command[reload or list]#reload
若出现connection refused 提示,请检查服务udptopoint是否运行正常。

5.2 修改客户端配置文件

客户端以ECS2为例,Windows下修改udptopoint文件夹下client_cfg.json.txt文件,Linux下修改/etc/multicast/client_cfg.json.txt文件,配置如下:
client_cfg.json.txt
{
    "multi_server_info_array": [
        {
            "group_ip": "224.1.2.3",
            "group_port": 7134,
            "server_ip": "192.168.0.1",
            "server_port": 7134
        }
    ]
}
同样修改后需要用reload工具加载到当前运行的服务器程序中:
Linux下运行:
    client_reload_list
please input command[reload or list]#reload
Windows下运行:
send_reload_multi_cfg
please input command[reload or list]#reload
若出现connection refused 提示,请检查服务udptomulti是否运行正常。

5.3 注意事项和测试

注意事项:
• 客户端和服务端Server_port需要保持一致,否则收不到数据包。
• 系统会生成日志信息,windows在目录C:\udptomulti下的client_log.txt及C:\udptopoint下的server_log.txt中,linux在目录/etc/multicast/下的client_log.txt和server_log.txt中。
• 服务配置成功后,可使用抓包工具进行测试,windows下推荐使用wireshark,linux下推荐使用自带的tcpdump命令。
• 如不能正常通信,在进行错误排查时,排查顺序为 1、服务端检测组播包是否正常转化成单播包并成功发送。2、客户端检测是否正常接收到单播包,排查网络问题。3、客户端是否正常将单播包重新转换成组播包。

6. 最佳实践结果

经过组播工具改造后,客户的各个经典网络下ECS之间已能够正常通过广播方式通信。


目录
相关文章
|
4月前
|
运维 物联网 Serverless
函数计算产品使用问题之怎么提高并发绘图
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
存储 监控 Serverless
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
函数计算发布功能问题之用户在使用主流函数计算产品的日志服务时可能会遇到使用成本的问题如何解决
|
3月前
|
边缘计算 缓存 自动驾驶
5G如何实现更高的数据速率?涉及哪些技术?
5G如何实现更高的数据速率?涉及哪些技术?
154 0
|
4月前
|
存储 测试技术 块存储
阿里云块存储问题之有顺序依赖的测试导致不稳定如何解决
阿里云块存储问题之有顺序依赖的测试导致不稳定如何解决
39 0
|
6月前
|
运维 Serverless API
函数计算产品使用问题之遇到配置丢失的问题,该怎么办
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
存储 安全 算法
十种接口安全方案!!!
日常开发中,如何保证接口数据的安全性呢?接口数据安全的保证过程,主要体现在这几个方面:一个就是数据传输过程中的安全,还有就是数据到达服务端,如何识别数据,最后一点就是数据存储的安全性。介绍下保证接口数据安全的10个方案。数据加签:用Hash算法(如MD5,或者SHA-256)把原始请求参数生成报文摘要,然后用私钥对这个摘要进行加密,就得到这个报文对应的数字签名sign(这个过程就是加签通常来说呢,请求方会把数字签名和报文原文一并发送给接收方。验签:接收方拿到原始报文和数字签名(sign)后,用。
334 1
|
设计模式 Java
JAVA设计模式7:适配者模式,彻底解决两不兼容接口之间的问题
JAVA设计模式7:适配者模式,彻底解决两不兼容接口之间的问题
178 0
|
计算机视觉
队列的概念及结构(内有成型代码可供CV工程师参考)
队列的概念及结构(内有成型代码可供CV工程师参考)
77 0
|
机器人 vr&ar 数据安全/隐私保护
【项目实战典型案例】25.AR系统、第三方、用户三角形超级稳定耦合
【项目实战典型案例】25.AR系统、第三方、用户三角形超级稳定耦合
|
负载均衡 监控 安全
网关系统就该这么设计,万能通用,稳的一批!
网关系统就该这么设计,万能通用,稳的一批!