我正在使用C ++和OpenGL进行游戏。我已经制作了一个线程服务器,它现在接受客户端(游戏)并从它们接收消息。现在游戏只发送消息。我希望游戏和服务器能够发送和接收,但我不确定最好的方法。我正在考虑使用一个线程进行发送,一个用于接收,两者都在同一个套接字上。现在游戏在一个线程中运行,服务器为每个客户端创建一个单独的线程。
寻找有关如何为游戏和服务器进行操作的建议(除非您的建议对两者都相同)。如有任何问题,请随时询问:)
谢谢!
答案 0 :(得分:1)
您需要做的是为每个客户端设置一个传出的消息队列。假设您有2个客户端连接到服务器,一个由线程A提供服务,另一个由线程B提供服务。线程A应在其套接字上执行WaitOnMultipleObjects()
,并在其队列的信号量/互斥/条件变量上执行{{1}}。这样,如果它在队列中得到某些东西,它就可以唤醒并发送出去。如果它从客户端收到一条消息,它不需要给客户端B,它将处理该消息并将其放入线程B的传出队列中。
这是一个非常简单的同步方案。如果你的游戏非常复杂或庞大,你将不得不做一些比这更聪明的事情。
答案 1 :(得分:1)
不要在游戏服务器中使用线程。许多专业的AAA游戏服务器都是单线程的 - 事实上,每一个我都见过的。
答案 2 :(得分:0)
考虑使用Boost.ASIO,它可以通过C ++ API实现这一点(除了异步I / O之外,还允许许多不同的方法)。有很多tutorials。但是,对于绝对最高的性能,您可能不应该使用线程。