看样子是IOCP最牛的,完全可以不深入理解另外四种就能能解决问题了?
还是5种模型,在各种情形必须使用不同的应对方式? 都需要掌握吗? 

解决方案 »

  1.   

    Windows情况
    想高效稳定,可以选择select或IOCP模型
    其他几种模型都很鸡肋WSAAsyncSelect和MFC的CAsyncSocket、CSocket用来练习可以WSAEventSelect偶尔搭配一下重叠模型或IOCP,一般是注册FD_ACCEPT事件重叠IO不如IOCP,重叠IO特耗EVENT(一次IO一个EVENT,EVENT可重用,前提是只能等前次IO完成才能进行下一次IO操作),每线程WaitForMultipleObjects最大数是64完成例程,效率不高,并发低(线程要用SleepEx,WaitFor...Ex,只能在系统处理IO时,处理一下数据)现有协议:webserver,ftp,telnet等等,基本都是字符串封包,
    如果发生粘包情况,IOCP不好处理,这些协议用select模型实现的多
    webserver等短连接情况也可用selectIOCP,一般是自定义封包,封包头+封包体,封包头固定大小,包含有整个封包的长度大小,一般用于长连接
      

  2.   

    请楼上的解释下
    现有协议:webserver,ftp,telnet等等,基本都是字符串封包, 
    如果发生粘包情况,IOCP不好处理,这些协议用select模型实现的多 
    webserver等短连接情况也可用select 
    谢谢
      

  3.   

    如要要增加通信模块的独立性,select模型是不是更方便一点
      

  4.   

    从模块的独立性来讲,select 和 iocp一样的。甚至iocp更好。
      

  5.   

    在很多地方用IOCP,感觉有点牛刀杀鸡 
      

  6.   

    没有大并发的情况下还是异步socket就可以了
      

  7.   


    同意,个人感觉根据项目的大小,采用适当的模型即可.
    当然从写服务器的角度考虑,也就是SELECT和IOCP模型.其余的几个都感觉更像是学习C/S模式而使用的学习形模型,真的要使用起来恐怕不够用.不过既然是学习的话,都学习也不难,而且本来几个都是由易到难的,基本的两三个都不能掌握,到了IOCP之类的模型就和看天书一样了.