请网络编程的高手,可否从性能上讲解一下wsaasyncselect的异步i/o模型与wsaeventselect异步i/o模型的差别,例如:推荐wsaeventselect模型,请说出它的优点来

解决方案 »

  1.   

    WSAAsyncSelect是通过窗口消息,而WSAEventSelect是通过Event来实现的。
    Windows网络编程中有一章的结尾,专门讲了几种IO模型的选择时的考虑。
      

  2.   

    WSAAsyncSelect在windwos下可以用。不太习惯WSAEventSelect。windows网络编程技术上有这些。windwos网络编程没看过,但更应该有这些。
      

  3.   

    WSAAsyncSelect适合于处理窗口消息,在属于窗口的回调函数中处理WSAAsyncSelect中指定的要接收消息,通过该消息再处理WSAAsyncSelect中指定的网络事件。
    WSAEventSelect是等待网络事件触发内核事件对象,再进行处理。显然不需要在窗口过程中处理,因为没有窗口~_~
    显然,你要是一个基于对话框或者基于其他窗口的程序,要处理消息,当然推荐WSAAsyncSelect了。
    WSAAsyncSelect更有针对性,WSAEventSelect大众化一点吧PS:
    windows网络编程技术,windwos网络编程
    貌似前面那个是中文版,后面那个英文版
      

  4.   

    WSAAsyncSelect一定要有个窗口负责处理消息,比如 MFC的CAsyncSocket.后者是事件通知,适合无窗口情况,一般来说前者在Windows下编程相对容易一些。
    不过它们的性能差距还是不小的
    windows网络编程2,后面有个测试结果,各种模式的情况连接成功对比。WSA- Async Select
     7000/ 1956    
     12,000/ 4077WSA- Event Select
     7000/ 6999
     12,000/ 11,080数据含义:连接次数/成功次数
    从他提供的数据来看,前者做服务器支持客户端最好在几百或千人左右,太多就不大稳定了,毕竟窗口处理消息的能力有限。
    而Event Select这种模式非常成熟,在Winsock1.1版本时,兼容BSD socket的select,有了Unix和Linux多年的经验,性能应该比较可靠。顺便一说,这个数据是书上提供的,我没进行测试。不过MS出版的书,理论上讲应该没太大出入。