套接字编程方案选择?
一台上位机与六个下位机相连,通过TCP/IP协议传输数据,相当于同时建立六个连接,每台下位机每60秒向上位机发送500个浮点型数据,我目前想到两种方案:
方案1、为每个连接建立一个数据接收线程,这样就相当于六个线程,采用阻塞套接字;
方案2、采用WSAAsyncSelect模型;
问题1:
方案1是否可行?比较担心的是线程数量较多。。。。
问题2:
对于第二种情况,因为是采用消息响应机制,如果想结合多线程来提高运行效率,不知道该如何操作?
问题3:
有没有更好的解决方案?
[解决办法]
同问!
我也在做这样一个项目,我准备用WSAAsyncSelect来做,一个socket线程,建一个隐藏窗口,所有的socket消息发这个窗口.这样就不怕socket和界面搅在一起会有效率问题.
或者,如果允许少量的丢包,干脆用UDP,更省事,但是老板不同意.
[解决办法]
如果只有10个以下的少量连接,建议用普通1对1模型去做,不需要考虑得太增开了!
[解决办法]
我还有觉得1可行, 我做的话就6个线程,每个线程也用一种事件通知机制WSAEventSelect。要么我就用完成端口。
[解决办法]
阻塞的效率还可以,但是不易扩展,以后加了机器数量再加线程数就不好了
WSAAsyncSelect效率不高
可以考虑WSAEventSelect、重叠IO或完成端口
ps:500个浮点数才多大?看起来使用UDP会更合适,效率高,资源占用少,还及时
[解决办法]
看上面的回复,怎么动不动就用完成端口? 用最基本的我觉得就行了