处理每个客户的线程是该项目的最佳解决方案吗?

时间:2019-04-28 13:55:37

标签: c sockets client-server

我目前正在用C开发带有AF_INET套接字的“在线”棋盘游戏。 它由一个服务器(每个游戏的“裁判”)和一个客户端组成。 客户的唯一工作是将玩家(游戏)选择的棋盘位置的位置发送到服务器,并且只有服务器必须处理每个玩家的游戏。服务器始终将棋盘的更改广播给每个玩家。

我正在努力解决的主要问题是沟通。我有2个选择:

  • 实现流套接字,并在服务器中创建一个线程(和套接字)来处理每个客户端。

  • 仅在服务器中实现一个数据报套接字,并创建一个线程来处理每个收到的播放,并通过其IP识别播放器。

在第二个选项中,我必须具有某种数据结构来保存每个玩家的数据(可能是哈希表,以促进快速访问),例如其得分,以及每次收到的比赛 我需要更新相应玩家的数据。在第一个选项中,本地线程堆栈变量可以保存这些信息。

此外,在第一个选项中,我将不得不(不必)有多个线程,即使recvfrom是具有被动等待功能的函数,内核也必须浪费时间来管理所有消息并将它们重定向到正确的插座对吗?

总而言之,即使我花了更多时间来实施,我也想实施最有效的客户端-服务器通信策略。 最有效的选择是什么?

0 个答案:

没有答案