1. 客户需求场景
对于传统端游来说,后台服务端架构通常都很复杂,各个服务器之间需要进行重度的网络通信。如果采用单播通信,就需要服务器随时知晓其他服务器的变动,整个架构往往变得十分笨重。出于对开发灵活性和节省主机计算资源的考虑,目前很多端游各个服务器之间仍然在使用udp广播通信。
2. 基本原理
在目前阿里云的经典网络和VPC网络环境下,由于底层交换机使用了三层交换机,因此不支持二层组播和广播。为了满足客户组播和广播的需求,可以使用单播的方式模拟组播。基本实现原理如下图:
3. Windows环境配置
Windows环境下,多播工具包括服务端udptopoint和客户端udptomulti,服务端安装在需要发送多播数据包的ECS上,客户端安装在需要接收多播数据包的ECS上。
3.1 安装
Windows多播代理程序通过安装包来安装。双击udptopoint-1.3.1.exe和udptomulti-1.1.1.exe安装包程序来安装,按照提示来安装。安安装目录:C:\udptopoint 和 C:\udptomulti。
安装说明:
1. 在安装过程中如果检测到winpcap已经安装,直接取消安装便可,也可继续覆盖安装。
2. 如果没有安装winpcap,则需要点击安装,如下图所示:
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命令。
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