关于围棋对弈服务器的服务器端程序结构有关问题

关于围棋对弈服务器的服务器端程序结构问题
我有一个ECS服务器,也就是服务器的一小部分,只有1核,1G内存,1M带宽。我想用它做围棋服务器,由于资源不是很丰富,想在程序编写上尽可能的效率高一点。减轻服务器的压力。

我在书上看到这样一段关于服务器端的程序结构的叙述:

“这个例子的程序结构是TCP服务器端最常用的架构,其特征是用一个独立的线程进行监听和接收连接,然后为每一个客户端创建一个工作线程。这种架构的好处是工作流程很清晰,与客户端相关的数据(如登录信息等,这类数据在别的系统中一般称为Session或者会话)放在线程过程的局部变量中,不必集中维护,这样就回避了在全局变量中维护Session列表时涉及的多线程的数据同步问题。

当然,这种架构的缺点就是当客户端数量到达一定程度时,由于创建的工作线程过多,浪费在线程切换上的时间比较多,造成性能的下降。基本上,同时在线的客户端 数量应该控制在几百个以下,如果同时在线的客户端数量远大于几百个,最合适的方法是使用完成端口(IOCP)模型。当然,在客户端数量还没有达到这个规模时,IOCP模型的复杂性带来的缺点反而会彻底抵消掉带来的好处。”

我的围棋对弈服务器,客户端可能会达到几千个。因为远远超出上述范围了,可是我又不想用IOCP模型。我这样可不可以?

如果每个客户端登录进来,服务器都要创建一个线程,确实,几千个线程,会带来巨大的CPU资源浪费。但是我这样可不可以:用一个独立的线程监听,每一个客户端连接进来,将这个套接字保存在一个客户端结构数组中,并将这个套接字设为非阻塞方式,并把它的消息绑定到一个窗口中,几千个客户端的套接字绑定到同一个窗口的消息中。并不为每个客户端创建新线程。

这样的话,在那个窗口中,每收到FD_READ消息,从wParam消息中取出套接字,从客户端结构数组中寻找该套接字(在几千个里寻找一个,对CPU来说是小菜一碟),并用这个套接字来读取数据,放到相应的数据结构中。

这样的话,几千个客户端,只创建两个线程,一个是监听线程,第二个就是窗口线程了。这样,是不是可以让服务器容纳几千个客户端?

------解决思路----------------------
这样做肯定是可以的啊,就是实际用起来当连接数多的时候效率怎么样得靠测试来验证了
当然即使用别的方法最终不也一样得靠测试来验证可不可行