diff --git a/README.md b/README.md index 4c12b37..8539eda 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,12 @@ 该项目是将地下城与勇士(毒奶粉、DNF、DOF)整合成一个 Docker 镜像的项目,本项目使用官方 `CentOS-5/6/7`为基础镜像,通过增加环境变量以及初始化脚本实现 应用的快速部署。 -如果觉得本项目和[XanderYe/dnf](https://github.com/XanderYe/dnf)对你有帮助,可以点一下 Star 支持下我们,谢谢。 +如果觉得本项目和[XanderYe/dnf](https://github.com/XanderYe/dnf)以及[llnut/dnf](https://github.com/llnut/dnf)对你有帮助,可以点一下 Star 支持下我们,谢谢。 ## 3.0.0 Release Plan ``` 1. 支持假人 -2. 通过插件支持几款登陆器 +2. 通过插件支持几款登录器 ``` ## 2025年计划 @@ -58,10 +58,11 @@ mkdir -p /data/log /data/mysql /data/data # DNF_DB_ROOT_PASSWORD 为 mysql root 密码,容器启动时会自动将 root 用户的密码修改为此值 # WEB_USER 为 supervisor web 管理页面用户名 # WEB_PASS 为 supervisor web 管理页面密码(可以访问 PUBLIC_IP:2000 来访问进程管理页面) +# CLIENT_POOL_SIZE 为 服务端启动是分配的客户端池大小,若单人使用可设置为3,多人使用请按需求增加,最大可分配1000 # --shm-size=8g【不可删除】,docker默认为64M较小,需要增加才能保证运行 # 注意,最后的 1995chen/dnf:centos5-2.1.5 部分中的 centos5,你在上一步(环境配置)拉取得哪个版本,则应替换为哪个版本 # tailscale需要额外映射设备: --device /dev/net/tun:/dev/net/tun -docker run -d -e PUBLIC_IP=x.x.x.x -e WEB_USER=root -e WEB_PASS=123456 -e DNF_DB_ROOT_PASSWORD=88888888 -e GM_ACCOUNT=gmuser -e GM_PASSWORD=gmpass -v /data/log:/home/neople/game/log -v /data/mysql:/var/lib/mysql -v /data/data:/data -p 2000:180 -p 3000:3306/tcp -p 7600:7600/tcp -p 881:881/tcp -p 7001:7001/tcp -p 7001:7001/udp -p 30011:30011/tcp -p 31011:31011/udp -p 30052:30052/tcp -p 31052:31052/udp -p 7300:7300/tcp -p 7300:7300/udp -p 2311-2313:2311-2313/udp --cap-add=NET_ADMIN --hostname=dnf --cpus=1 --memory=1g --memory-swap=-1 --shm-size=8g --name=dnf 1995chen/dnf:centos5-2.1.9.fix1 +docker run -d -e PUBLIC_IP=x.x.x.x -e WEB_USER=root -e WEB_PASS=123456 -e DNF_DB_ROOT_PASSWORD=88888888 -e GM_ACCOUNT=gmuser -e GM_PASSWORD=gmpass -e CLIENT_POOL_SIZE=10 -v /data/log:/home/neople/game/log -v /data/mysql:/var/lib/mysql -v /data/data:/data -p 2000:180 -p 3000:3306/tcp -p 7600:7600/tcp -p 881:881/tcp -p 7001:7001/tcp -p 7001:7001/udp -p 30011:30011/tcp -p 31011:31011/udp -p 30052:30052/tcp -p 31052:31052/udp -p 7300:7300/tcp -p 7300:7300/udp -p 2311-2313:2311-2313/udp --cap-add=NET_ADMIN --hostname=dnf --cpus=1 --memory=1g --memory-swap=-1 --shm-size=8g --name=dnf 1995chen/dnf:centos5-2.1.9.fix1 ``` ## 如何确认已经成功启动 @@ -213,6 +214,9 @@ docker restart dnf * A: 内存或者swap不足,可以将swap设置为10g或更大(对应docker run参数`--shm-size=10g`同时调整) * A: swap占用为0,通过free -m查看swap使用率,通过sysctl -p查看设置是否正确,设置正确依旧swap占用为0,需要重启服务器。参考 [这里](./doc/PrepareLinux.md#%E9%85%8D%E7%BD%AE%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4%E8%8B%A5%E5%86%85%E5%AD%98%E4%B8%8D%E8%B6%B3-8gb) 进行设置 +16. 配置了CLIENT_POOL_SIZE之后发现`df_bridge_r`和`df_channel_r`内存占用依然都为1.3GB + * A: 若您是从旧版本升级而来,请先删除docker挂载目录中的`/data/run/start_bridge.sh`和`/data/run/start_channel.sh`,之后重启服务端即可生效(只需删除一次即可,后续启动服务端无需再次删除)。 + ## 高级部署 [点击查看更多部署方式](doc/OtherDeploy.md) @@ -285,9 +289,12 @@ QQ 6群:933010289 ## 社区 -XanderYe站库分离镜像:[XanderYe/dnf](https://github.com/XanderYe/dnf) +XanderYe站库分离镜像:[XanderYe/dnf](https://github.com/XanderYe/dnf) +llnut清风1031镜像:[llnut/dnf](https://github.com/llnut/dnf) -`libhook.so`优化CPU占用源码:https://godbolt.org/z/EKsYGh5dv +`libhook.so`优化CPU占用源码:[https://godbolt.org/z/EKsYGh5dv](https://godbolt.org/z/EKsYGh5dv) +`DofSlim`优化服务端内存占用源码:[https://github.com/llnut/DofSlim](https://github.com/llnut/DofSlim) +`Sorahk`多功能高性能连发程序: [https://github.com/llnut/Sorahk](https://github.com/llnut/Sorahk) ## 申明 ``` diff --git a/build/dnf_data/docker-entrypoint.sh b/build/dnf_data/docker-entrypoint.sh index 4cbb0e3..d101ea3 100755 --- a/build/dnf_data/docker-entrypoint.sh +++ b/build/dnf_data/docker-entrypoint.sh @@ -38,6 +38,7 @@ export DDNS_DOMAIN=$(echo $DDNS_DOMAIN | sed "s/[\'\"]//g") export DDNS_INTERVAL=$(echo $DDNS_INTERVAL | sed "s/[\'\"]//g") export NB_SETUP_KEY=$(echo $NB_SETUP_KEY | sed "s/[\'\"]//g") export NB_MANAGEMENT_URL=$(echo $NB_MANAGEMENT_URL | sed "s/[\'\"]//g") +export CLIENT_POOL_SIZE="$(echo "${CLIENT_POOL_SIZE:-10}" | sed "s/[\'\"]//g")" # 校验用户选择的大区 SERVER_GROUP_NAME_VAR="SERVER_GROUP_NAME_$SERVER_GROUP" if [ "$SERVER_GROUP" -ge 1 ] && [ "$SERVER_GROUP" -le 6 ]; then diff --git a/build/dnf_data/home/template/init/bridge_hook.so b/build/dnf_data/home/template/init/bridge_hook.so new file mode 100755 index 0000000..289054c Binary files /dev/null and b/build/dnf_data/home/template/init/bridge_hook.so differ diff --git a/build/dnf_data/home/template/init/channel_hook.so b/build/dnf_data/home/template/init/channel_hook.so new file mode 100755 index 0000000..0a48f61 Binary files /dev/null and b/build/dnf_data/home/template/init/channel_hook.so differ diff --git a/build/dnf_data/home/template/init/init.sh b/build/dnf_data/home/template/init/init.sh index 8800e1a..47c1246 100755 --- a/build/dnf_data/home/template/init/init.sh +++ b/build/dnf_data/home/template/init/init.sh @@ -144,6 +144,10 @@ else echo "get_ddns_ip.sh have already inited, do nothing!" fi +# 旧版本启用DofSlim需要先删除start_bridge.sh和start_channel.sh +[ -f "/data/run/start_bridge.sh" ] && ! grep -q -e "^LD_PRELOAD=.*/home/template/init/bridge_hook.so" "/data/run/start_bridge.sh" && rm -f "/data/run/start_bridge.sh" +[ -f "/data/run/start_channel.sh" ] && ! grep -q -e "^LD_PRELOAD=.*/home/template/init/channel_hook.so" "/data/run/start_channel.sh" && rm -f "/data/run/start_channel.sh" + # 初始化所有run脚本 for fp in "/home/template/init/run"/*.sh do diff --git a/build/dnf_data/home/template/init/run/start_bridge.sh b/build/dnf_data/home/template/init/run/start_bridge.sh index a808ecf..39aaaad 100755 --- a/build/dnf_data/home/template/init/run/start_bridge.sh +++ b/build/dnf_data/home/template/init/run/start_bridge.sh @@ -5,6 +5,6 @@ killall -9 df_bridge_r rm -rf pid/*.pid echo "starting bridge..." # 使用默认的DP降低CPU占用 -LD_PRELOAD=/home/template/init/libhook.so ./df_bridge_r server start +LD_PRELOAD=/home/template/init/bridge_hook.so:/home/template/init/libhook.so ./df_bridge_r server start sleep 2 cat pid/*.pid |xargs -n1 -I{} tail --pid={} -f /dev/null diff --git a/build/dnf_data/home/template/init/run/start_channel.sh b/build/dnf_data/home/template/init/run/start_channel.sh index ffd243b..d4e5696 100755 --- a/build/dnf_data/home/template/init/run/start_channel.sh +++ b/build/dnf_data/home/template/init/run/start_channel.sh @@ -34,6 +34,6 @@ rm -rf /tmp/channel.cfg # 启动服务 echo "starting channel..." # 加载DP并启动,该DP可以被自定义[确保DP路径已经被正确映射] -LD_PRELOAD=/dp2/libhook.so ./df_channel_r channel start +LD_PRELOAD=/home/template/init/channel_hook.so:/dp2/libhook.so ./df_channel_r channel start sleep 2 cat pid/*.pid |xargs -n1 -I{} tail --pid={} -f /dev/null diff --git a/deploy/dnf/docker-compose/basic/docker-compose.yaml b/deploy/dnf/docker-compose/basic/docker-compose.yaml index f86f85c..238e10a 100644 --- a/deploy/dnf/docker-compose/basic/docker-compose.yaml +++ b/deploy/dnf/docker-compose/basic/docker-compose.yaml @@ -32,6 +32,7 @@ services: # 开启DDNS[可选配置] # - DDNS_ENABLE=true # - DDNS_DOMAIN='' + # - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10 # shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行 shm_size: 8g memswap_limit: -1 diff --git a/deploy/dnf/docker-compose/multi_channel/docker-compose.yaml b/deploy/dnf/docker-compose/multi_channel/docker-compose.yaml index 357acda..fe02233 100644 --- a/deploy/dnf/docker-compose/multi_channel/docker-compose.yaml +++ b/deploy/dnf/docker-compose/multi_channel/docker-compose.yaml @@ -18,6 +18,7 @@ services: - PUBLIC_IP=127.0.0.1 # 仅开启11和52频道 - OPEN_CHANNEL='1,6,7' + # - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10 # shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行 shm_size: 8g memswap_limit: -1 diff --git a/deploy/dnf/docker-compose/standalone_mysql/docker-compose.yaml b/deploy/dnf/docker-compose/standalone_mysql/docker-compose.yaml index d535275..6217634 100644 --- a/deploy/dnf/docker-compose/standalone_mysql/docker-compose.yaml +++ b/deploy/dnf/docker-compose/standalone_mysql/docker-compose.yaml @@ -35,6 +35,7 @@ services: - GM_PASSWORD=gmpass - GM_CONNECT_KEY=763WXRBW3PFTC3IXPFWH - GM_LANDER_VERSION=20180307 + # - CLIENT_POOL_SIZE=10 # 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用,请按需求设置,默认为10 # shm_size: 8g【不可删除】,docker默认为64M较小,需要增加才能保证运行 shm_size: 8g memswap_limit: -1 diff --git a/doc/OtherDeploy.md b/doc/OtherDeploy.md index a066ba2..9bcd43d 100644 --- a/doc/OtherDeploy.md +++ b/doc/OtherDeploy.md @@ -81,6 +81,7 @@ | OPEN_CHANNEL | 开启的频道 | 支持配置范围,配置之间用逗号分隔,例如:1-11,12,22-25,51-55 | '11,52' | | DNF_DB_ROOT_PASSWORD | DNF数据库root密码[当使用独立数据库时,root密码用于初始化数据以及game账号自动化创建、授权] | | '' | | DNF_DB_GAME_PASSWORD | DNF数据库game密码[必须8位] | | '' | +| CLIENT_POOL_SIZE | 服务端启动时分配的客户端缓冲池大小,此配置项影响df_bridge_r和df_channel_r的内存占用 | 3-1000 | 10 | ### 进程监控管理页面配置