CS构架,一个服务器与200多个客户端通讯,客户端服务器间通讯数据不多,但必须保持实时通讯,不能断开
如果解决?开200多个线程不实际吧
哪位大虾有实例?拜求~~~~

解决方案 »

  1.   

    建议学一下tcp/ip的思路……呵呵……
      

  2.   

    overlapped I/O or IOCP.
      

  3.   

    完成i/o
    建议LZ看下书,找点资料
      

  4.   

    如果数据量很少的话,可以考虑用WSAAsyncSelect,然后直接在消息处理中收发,这样最简单。IOCP的效率主要体现在大并发量的连接和数据收发上,你的情况是保持200连结小数据量,所以我认为用不着IOCP
      

  5.   

    要是所有的scoket都做同样的事情,写一个线程定义就可以来,只不过起200个同样的线程而已也可以用select判断,哪个socket有数据到达,就处理哪个,这样用一个或者几个就可以来
      

  6.   

    Win NT以上系统支持WSAAsyncSelect、WSAEventSelect、Overlapped IO、IOCP几种模式,但WSAEventSelect跟WSAAsyncSelect因为实现上依赖WSAWaitForMultipleEvents ,而WSAWaitForMultipleEvents 对于Event的数量有一个限制即不超过WSA_MAXIMUM_WAIT_EVENTS (64),所以如果使用WSAEventSelect跟WSAAsyncSelect,多于64个Client就必须相应增加线程来处理,但这两种模式相对实现简单,IOCP可以支持最大限度由可用socket句柄号数决定,但IOCP实现比较复杂。
      

  7.   

    补充下楼上:原始的select模型也有64个socket的限制,不过可以通过重定义来扩充,不知道WSAWaitForMultipleEvents 是不是也可以这样
      

  8.   

    主要问题在于我的服务器端是要主动去connect那200多个客户端
    而不是listen等待每个客户端来连接
    这样还能用完成端口实现吗?
    难道我真的要开200个线程去处理每一个连接?
      

  9.   

    主要问题在于我的服务器端是要主动去connect那200多个客户端?有个前提,服务端连接客户端,必须首先获得客户端的信息,通常都是listen等待客户端连接,之后,才能够获得连接客户端的必要条件。你的客户端和服务端之间的通信协议是如何定的?服务端connect多个客户端,也可以用IOCP实现,200个客户端肯定是没有问题。如果对200客户端的connect需要同时保持长连接(这个需求很少),并且需要相互独立的管理这200个连接,开销比较大。
    如果是短连接方式的话,设置一个链接池来管理。
      

  10.   

    回楼上的,我这边的情况比较特殊,通讯协议是TCP
    但情况是200个客户端处于listen等待accept,而服务器要依次去connect这些客户端,跟平常的CS系统1:N相反,我的是N:1
      

  11.   

    哦,你的通信模型是这样的。那还是用线程方式,分开处理每一个连接上的IO,把问题转换为如何管理200个线程了,在这里至于连接的稳定和重连,以及管理要高于IO上的问题
      

  12.   

    我还没从没写过这么多线程的
    是不是一定要写200个声明、定义和创建?这不是要费大量时间?
    -----------------------
    不用吧,线程函数只需要一个,因为你所有的线程都使用同一种模型和逻辑处理连接和IO创建线程,你循环200个Create,当然需要一个数组或者容器类来管理你这200个线程句柄以及ID,客户端套接字等等
      

  13.   

    你的服务器端需要connect客户端???
    这是服务器端么??Sever是用来Listen一个对client开放的端口,然后Accept客户端,接收客户端数据或主动下发数据,
    200个线程,你认为你的效率会如何?