我正在开发一个基本的配对服务器。基本过程如下:
问题在于,每次客户端连接时,我都需要向所有可能的匹配报告此新客户端,并向该新连接客户端报告所有可能的匹配(因此,无法匹配的客户端必须始终准备好{{1}来自服务器)。同时,客户端可以在任何时候选择匹配或断开连接(因此客户端必须始终准备好recv
并且服务器必须准备好send
)
我怀疑这个问题的真正解决方案是使用线程,客户端和服务器的后台recv
线程,以及主用户交互recv
线程。
所以我有两个与此相关的问题:
send
和send
吗?(标记为C ++和obj-c,因为服务器是用C ++构建的,客户端是obj-c)
答案 0 :(得分:2)
是的,一个线程上的recv()
和使用相同套接字的另一个线程上的send()
是安全的。
服务器端,使用专用线程只有在同时连接到服务器的客户端相对较少的情况下才能有效工作。如果可伸缩性是一个问题,则需要使用异步I / O,甚至是I / O完成端口(如果可能),以在单个线程上管理多个客户端,从而将所需线程的数量降至最低。
答案 1 :(得分:1)
在任何合理的套接字库实现中都是安全的。这也是正确的方法。