我有一个游戏服务器,它是一个 java 应用程序。此服务器侦听端口 25565。客户端连接到此服务器,连接可持续数小时。
我遇到了部署此服务器的新版本的问题。要运行新版本的服务器,必须关闭旧版本。但这会导致关闭与客户端的连接。即使在凌晨 4 点,也有不少顾客。
我想运行新版本的服务器,但只要有客户端连接就保持旧版本运行。但在这种情况下,新服务器将无法上线,因为它无法占用25565端口,该端口仍会被旧应用程序占用。
新服务器能否以某种方式覆盖端口 25565?
这样新的连接就会到达新的服务器,但与旧服务器的剩余连接不会关闭。
我的服务器正在运行 debian 9。
将服务器的主端口改为25560端口
防火墙转发
在端口 25561 上运行第二个服务器
添加转发到新端口并删除转发到旧端口
此外,已建立的连接仍保留在原来的位置。如果客户端在每场比赛中保持一个连接,则不会有任何问题。
事实证明,这在 java 中是可能的。
如果创建服务器、获取客户端并关闭服务器,则与客户端的连接保持打开:
我检查了
clientSocket数据是否可以通过连接传输。之后释放服务器端口
server.close()。