挂起 .NET 中的子进程

本文关键字:子进程 NET 挂起 | 更新日期: 2023-09-27 18:32:51

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

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

我的伪思维过程是...

  • 最后一个播放器与服务器断开连接
  • 守护程序接管在服务器端口上侦听连接
  • 传入连接后,保存连接数据包数据并重新启动服务器子进程
  • 将保存连接传递给 Minecraft Java 进程

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

挂起 .NET 中的子进程

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

你应该有一个守护进程等待连接并将它们放在队列或其他东西上,直到服务器启动,然后向它提供连接(或连接数据包或其他(。在服务器启动并且所有连接都转发到它之后,让您的守护程序"停止"(也称为死亡或停止堵塞端口(

希望这有帮助。

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

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

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