第七节 什么是跨服?

跨服同时也是搭建我的世界服务器中的一项复杂的一门技术,在搭建多个服务器时,要做一些研究以及了解的工作。

自我思考

  1. 我是不是需要跨服?
  2. 我的服务器是否有那么多的玩家在游玩?
  3. 我的服务器是不是性能多余,核心老是满不起来?
  4. 想不想把服务器做大,游戏内容多样话,同时玩家在游玩的时候体验的非常舒适?

如果是的请继续往下

了解

跨服大致就是“分布式部署“我的世界的服务端从而提高服务器硬件的利用率的一种技术手段。

也就是代理服务器,他的作用就是代理玩家进入到服务器内部的一个个子服务端,作为内网与外网之间的桥梁。

从前到后、从后到前、跨服版本数量繁多

BungeeCordVelocityLilypadWaterFallHexaCordTravertineMinecraft-Proxy

本次采用的是 BungeeCord

首先构思一下服务器的框架以及配置文件

学习 配置文件(Config.yml)详细介绍

  1. server_connect_timeout: 5000
  2. #服务器无响应,多少毫秒后BungeeCord会关闭这个连接
  3. remote_ping_cache: -1
  4. #远程Ping缓存
  5. forge_support: false
  6. #ForgeMOD支持,如果有MOD服务器,请打开这个选项
  7. player_limit: -1
  8. #玩家限制,它将限制整个服务器的玩家人数,-1为不限
  9. permissions:
  10. # BungeeCord服务器权限组 也就是指令权限
  11. default:
  12. - bungeecord.command.server
  13. #服务器
  14. - bungeecord.command.list
  15. #显示在线玩家
  16. admin:
  17. - bungeecord.command.alert
  18. #全服公告
  19. - bungeecord.command.end
  20. #关闭BungeeCord
  21. - bungeecord.command.ip
  22. #IP
  23. - bungeecord.command.reload
  24. #BungeeCord重载插件权限
  25. timeout: 30000
  26. #当玩家在BungeeCord中无响应多长时间,BungeeCord才会将他踢出去,
  27. log_commands: false
  28. #记录命令
  29. network_compression_threshold: 256
  30. #这个参数只有1.8的服务端才有,含义是网络封包压缩的阀值。当封包长度高于这个值时,封包会被压缩。(适当调整可提高性能)
  31. online_mode: true
  32. #正版验证,如果是盗版服请关闭
  33. disabled_commands:
  34. #服务器禁止的指令
  35. - disabledcommandhere
  36. servers:
  37. #子服务器列表
  38. lobby:
  39. #服务器名称
  40. motd: '&1Just another BungeeCord - Forced Host'
  41. #服务器MOTD 支持颜色字符
  42. address: localhost:25565
  43. #服务器的内网ip地址以及端口
  44. restricted: false
  45. listeners:
  46. - query_port: 25577
  47. #UDP查询端口
  48. motd: '&1Another Bungee server'
  49. #客户端列表看到的服务器介绍
  50. tab_list: GLOBAL_PING
  51. query_enabled: false
  52. #是否开启UDP监听查询
  53. proxy_protocol: false
  54. #代理协议
  55. forced_hosts:
  56. #可以用域名绑定通过域名直接进入指定服务器
  57. pvp.md-5.net: pvp
  58. ping_passthrough: false
  59. #是否穿透BungeeCord直接获取后端服务器ping信息,如motd等。
  60. priorities:
  61. #优先服务器列表,就是登录服务器或者大厅服务器
  62. - lobby
  63. bind_local_address: true
  64. #是否把BungeeCord端和你服务器通讯的IP地址设置为BungeeCord端监听的地址
  65. host: 0.0.0.0:25577
  66. #BungeeCord的IP地址,访问它就能进入BC服务器进入其他服务器。
  67. max_players: 1
  68. #服务器显示的最大人数 不是真实人数
  69. tab_size: 60
  70. #按Tab键的时候,显示的玩家列表总容量。60的时候是三列,80的时候是四列
  71. force_default_server: false
  72. #强制跳转到默认服务器
  73. ip_forward: false
  74. #是否启用真实IP与UUID转发功能
  75. remote_ping_timeout: 5000
  76. #远端服务器无响应,多少毫秒后BungeeCord会关闭这个连接
  77. prevent_proxy_connections: false
  78. #防止远端使用代理登入
  79. groups:
  80. #玩家组权限
  81. md_5:
  82. - admin
  83. connection_throttle: 4000
  84. #连接间隔,当玩家退出后多就能加入
  85. stats: b2bd44d7-c14e-4a4c-8s67-e5ecdf22d160
  86. #机器码,请不要修改,服务端会自己生成的
  87. log_pings: true
  88. # 记录ping值

BungeeCord 搭建

我们假设以三个服为准:登入服、生存服和创造服。

玩家可以通过指令、菜单和传送门到达各子服务端,同步玩家的背包以及状态、聊天以及公告。

Bungee - 图1

在 BungeeCord目录下 config.yml 配置 servers:host:

  1. host: 0.0.0.0:61390
  2. #定义为 0.0.0.0 指接受任意地址连接
  3. #端口需要设置为服务商提供的对外开放的端口,独立IP则自选。
  4. servers:
  5. 服务器名称(可以中文最好英文):
  6. motd: '子端标语(可以保留不变)'
  7. address: 子端地址:子端端口
  8. restricted: false

如下:

  1. server:
  2. 登入服:
  3. motd: '&1Just another BungeeCord - Forced Host'
  4. address: localhost:21000
  5. restricted: false
  6. 生存服:
  7. motd: '&1Just another BungeeCord - Forced Host'
  8. address: localhost:22000
  9. restricted: false
  10. 创造服:
  11. motd: '&1Just another BungeeCord - Forced Host'
  12. address: localhost:23000
  13. restricted: false

服务器目录框架

Bungee - 图2

对应的修改每一个子服务端的server.properties

  1. 登入服
  2. server-ip=127.0.0.1
  3. server-port=21000
  4. 生存服
  5. server-ip=127.0.0.1
  6. server-port=22000
  7. 创造服
  8. server-ip=127.0.0.1
  9. server-port=23000

注意:设置server-ip=127.0.0.1 可以防止玩家不经过登陆服直接访问到子服务端,务必设置到内网地址!

注意:子服端口server-port= 不需要设置为服务商提供的对外开放的端口!

如果使用 Spigot 类型的端,一般目录下会有一个spigot.yml文件,在其中需要将bungeecord项修改为true来支持跨服的协议:

  1. bungeecord: true

如果使用 Paper 服务端,一般目录下会有一个paper.yml文件,若你搭建的是非正版服务器,则需要将其中的bungee-online-mode项修改为false

  1. bungee-online-mode: false

安全起见,建议将 BungeeCord 的config.yml中的groups项进行如下修改:

  1. groups: {}

如此一来,我们便成功地搭建了一个有三个子端的Bungee群组服务器。

Bungee - 图3

在后期也可以安装BungeeCord安装相关的插件来加强Bungee的功能。