在.NET中暂停子流程?

时间:2012-05-02 13:54:21

标签: c# java .net process minecraft

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

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

我的伪思想过程是......

  • Last Player与服务器断开连接
  • 守护程序接管侦听服务器端口以进行连接
  • 在传入连接时,保存连接数据包数据并重新启动服务器子进程
  • 将保存连接传递给Minecraft java进程

我无法弄清楚如何处理最后一步,但这是我提出的最佳解决方案。有什么想法或建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助。

答案 1 :(得分:0)

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

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

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