3

我正在开发一个基本的配对服务器。基本流程是这样的:

  1. 客户端连接到服务器,报告客户端的名称和他们正在寻找的匹配类型
  2. 服务器报告所有可能的匹配
  3. 客户选择他/她想要配对的匹配项
  4. 服务器匹配两个客户端

问题是,每次客户端连接时,我都需要向该新客户端报告所有可能的匹配项,并将所有可能的匹配项报告给该新连接客户端(因此,在不匹配的情况下,客户端必须始终准备好recv从服务器访问)。同时,客户端可以随时选择匹配或断开连接(因此客户端必须始终准备好,send服务器必须准备好recv

我怀疑这个问题的真正解决方案是使用线程,一个recv用于客户端和服务器的后台线程,以及一个主用户交互send线程。

所以我有两个与此相关的问题:

  1. 它是否在不同线程上同时保存到send同一个套接字连接?recv
  2. 这甚至是处理这个问题的正确方法吗?

(标记为 C++ 和 obj-c,因为服务器是用 C++ 构建的,客户端是 obj-c)

4

2 回答 2

2

是的,recv()在一个线程和send()另一个线程上使用同一个套接字是安全的。

在服务器端,只有当您同时连接到服务器的客户端相对较少时,使用专用线程才会有效。如果可伸缩性是一个问题,您需要使用异步 I/O,如果可能的话甚至使用 I/O 完成端口,在单个线程上管理多个客户端,将所需线程的数量保持在最低限度。

于 2013-04-10T15:51:03.817 回答
1

在任何合理的套接字库实现中都是安全的。这也是正确的做法。

于 2013-04-10T15:47:21.463 回答