快过大年的时候还要问个技术问题
最近要做一个实时通讯程序,用一台电脑做服务器,处理大概50-100个终端发来的数据,采用的是UDP通讯。
服务器端的程序初步方案如下
1、在服务器上创建一Socket,采用基于Windows消息的异步选择机制,注册一消息响应函数负责接收数据。
2、同时启动50-100个数量不等的线程,线程数量视终端数量而定,每个线程负责一个终端。
3、主线程中的消息响应函数将接收来的数据放入接收队列。
4、由子线程从接收队列中分别取出属于自己终端发来的数据,处理完成后发还给终端。
各位技术达人,不知道此种设想可行否?有经验的朋友请给力一下。谢谢啊
[解决办法]
1.一个接收线程负责读socket数据到接收队列,一个发送线程负责从发送队列发送数据到socket,另外一个线程池中的若干个工作线程负责处理数据。
2.线程池中的每个线程从接收队列读数据,判断它是哪个client发过来的,处理后,写入发送队列。
3.没必要给每个client分配一个线程,根据请求的数据量,决定线程池中线程数量即可。如果处理过程只是cpu运算之类,不涉及与其他服务器的网络交互,或数据库操作,那么线程池中只需要一个线程即可,多个线程不但不会快,反而由于线程切换会导致更慢。这个要根据具体情况分析,测试。
[解决办法]