我正在编写一个具有多人功能的游戏,我需要编写一个服务器控制台。一个简单的“从标准输入读取 -> 进程输入 -> 写入输出”循环将不起作用,因为服务器必须正在运行并且可能会在服务器管理员在服务器控制台中键入时打印日志消息。我已经看到了适用于 UNIX/Linux 系统的 tecla 和 Editline 库,但没有找到适用于 Windows 的任何东西。有什么好的图书馆可以做这类事情?
如果您不理解,这与c/c++ 的交互式控制台编程几乎相同?但对于 Windows。
我正在编写一个具有多人功能的游戏,我需要编写一个服务器控制台。一个简单的“从标准输入读取 -> 进程输入 -> 写入输出”循环将不起作用,因为服务器必须正在运行并且可能会在服务器管理员在服务器控制台中键入时打印日志消息。我已经看到了适用于 UNIX/Linux 系统的 tecla 和 Editline 库,但没有找到适用于 Windows 的任何东西。有什么好的图书馆可以做这类事情?
如果您不理解,这与c/c++ 的交互式控制台编程几乎相同?但对于 Windows。
这个问题有两种通用的方法:
在一个线程中运行整个服务器,并使用一个使用异步 IO 的主循环来控制线程,以确定事件(传入数据包、控制台按键等)来自何处并处理它们。
在 unix 系统中,在一些更高的 unix/linux 版本中,您有select()
调用和一些更高级的变体,如和 epoll()`。poll()
在 Windows 中,他们称之为Overlapped IO。
让单独的线程管理服务器的不同部分。通常的方法是,每个客户端一个线程,加上一个控制台线程。在这里,您必须明智地使用互斥锁、条件变量等,而不是尝试编写主循环,以确保线程不会踩到彼此的脚趾。