2

去年我在 .NET 中编写了一个小型守护程序应用程序,它基本上启动了一个 Minecraft 服务器,并提供了一个基于 Web 的 GUI 来管理它。它会做其他事情,例如在进程崩溃时重新启动进程,以及其他有用的功能。

我们公司最近听说一家法国托管公司已经设置了他们的服务器,当最后一个玩家断开连接时,服务器会关闭,直到另一个玩家加入。现在,我一直在思考这怎么可能,并想看看对此有何想法。我的守护进程已经可以知道连接了多少玩家,所以这不是问题。

我的伪思维过程是...

  • 最后一名玩家与服务器断开连接
  • 守护进程接管服务器端口上的连接监听
  • 收到连接后,保存连接包数据并重启服务器子进程
  • 将保存连接传递给 Minecraft java 进程

我真的不知道如何处理最后一步,但这是我想出的最佳解决方案。有什么想法或建议吗?

4

2 回答 2

0

您不能“保存” TCP 网络连接,然后将其重定向到不同的进程。实现这一点的唯一方法是让您的工具充当代理服务器,接受所有连接并将所有数据发送到在不同端口上运行的服务器。

在这样的设置中,您可以在第一个传入连接时启动服务器。

唯一的其他解决方案将需要对网络接口的直接读取访问,例如 Wireshark/Pcap 库使用的方式。他们将能够检测 TCP SYN 数据包并在它们进入时启动服务器。

于 2012-05-02T18:29:06.967 回答
0

也许你会有更多的玩家想要一次连接,所以你可能会遇到这种方法的问题(因为我猜你的服务器不会立即启动)。

您应该有一个守护进程等待连接并将它们放在队列或其他东西上,直到服务器启动,然后将连接(或连接数据包或其他)提供给它。服务器启动后,所有连接都转发给它,让你的守护进程“停止”(也就是死或停止阻塞端口)

希望这可以帮助。

于 2012-05-02T16:35:00.487 回答