本帖最后由 VisualEleven 于 2011-01-04 11:22:23 编辑

解决方案 »

  1.   

    WINDOWS下使用IOCP, LINUX下使用EPOLL
      

  2.   

    Winsock的IO模型很多嘛,select,WSAAsyncSelect,WSAEventSelect,重叠IO,IOCP,你可以根据自己的需要来选择
      

  3.   

    首先给你推荐WSAEventSelect模型,其次是IOCP模型。网上查查这两个模型,非常不错的选择。
      

  4.   

    使用事件选择模型(WSAEventSelect)就行了
      

  5.   

    别用链表,用select模型就可以了,很简单的。接收到一个客户端的socket之后,把socket放到fd_set结构中。创建线程,用select查询fd_set结构体,可以查出哪些socket上有io请求,然后处理就行了。你用链表+轮询的方式,实际上就是实现了select模型。windows本身已经提供了fd_set和select函数实现轮询的功能。不过需要注意的是,select一个线程中支持的最大客户端数量是64个,你800个客户端,大概需要13个线程就够了。 
    IOCP模型也可以,不过实现起来复杂,解决消息包投递乱序问题是IOCP模型实现起来最麻烦的地方。一般情况下用select模型就可以,也具有相当高的效率