去年我在.NET中编写了一个小型守护程序应用程序,它基本上启动了一个Minecraft服务器,并提供了一个基于Web的GUI来管理它。它会执行其他操作,例如在崩溃时重新启动进程以及其他有用的功能。
我们公司最近听说有一家法国托管公司设置了他们的服务器,当最后一个玩家断开连接时,服务器将关闭,直到另一个玩家加入。现在,我一直在考虑如何做到这一点,并想看看它的想法是什么。我的守护进程已经知道有多少玩家已连接,所以这不是问题。
我的伪思想过程是......
我无法弄清楚如何处理最后一步,但这是我提出的最佳解决方案。有什么想法或建议吗?
答案 0 :(得分:0)
也许你会有更多想要一次连接的玩家,所以你可能会遇到这种方法的问题(因为我猜你的服务器不会立即启动)。
您应该有一个守护进程等待连接并将它们放在队列或其他东西上,直到服务器启动,然后将其提供给连接(或连接数据包或其他)。服务器启动后,所有连接都已转发给它,让你的守护进程“停止”(a.k.a死或停止堵塞端口)
希望这有帮助。
答案 1 :(得分:0)
您无法“保存”TCP网络连接,然后将其重定向到其他进程。实现此目的的唯一方法是让您的工具充当代理服务器,接受所有连接并将所有数据发送到在不同端口上运行的服务器。
在这样的设置中,您可以在第一次传入连接时启动服务器。
唯一的其他解决方案需要对网络接口进行直接读取访问,例如:由Wireshark / Pcap库使用。他们可以检测TCP SYN数据包并在它们进入时启动服务器。