mez*_*ezo 0 c++ sockets udp tcp
我正在尝试实现简单的网络游戏(客户端-服务器),它使用 UDP 通过网络传输游戏事件,并且我运行良好,但现在我想在同一控制台应用程序中通过 tcp 添加游戏聊天。我尝试使用select()非阻塞主套接字来实现多客户端聊天。聊天作为独立应用程序运行,但我在将其组合在一起时遇到问题。
基本上我的服务器循环如下所示:
while(true)
{
sendUDPdata()
...
while(true)
{
receiveUDPdata()
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我想将聊天添加到服务器的主循环(处理 UDP)时,如下所示:
while(true)
{
HandleTCPConnections();
sendUDPdata();
...
while(true)
{
receiveUDPdata();
}
}
Run Code Online (Sandbox Code Playgroud)
调用select()会 HandleTCPConnections()阻塞整个服务器。有什么办法可以处理这个问题吗?
有两种好方法可以做到这一点:
使用线程。有一个线程来处理 TCP 套接字,还有一个线程来处理 UDP 套接字。
使用反应器。UDP 代码和 TCP 代码都向反应器注册它们的套接字。反应器会阻塞所有套接字(通常使用poll),并在该套接字上发生活动时调用适当的代码。
如果您不想重新发明轮子,可以使用许多用于这两个选项的库(例如libevent和boost.asio )。