如果同时有数百个客户端连接到Server端,server端该用什么样的处理方式呢?异步的还是同步的,用同步的话可不可以不要为每个连接建立一个新线程?异步的能处理这么多的socket连接么?

解决方案 »

  1.   

    服务端建立Listen线程,收到客户连接请求后分配一个Session线程(socket),
    每个Session线程和client端socket通讯。
      

  2.   

    如果你使用windows NT/2000操作系统,建议你使用IoCompletion技术。
    否则可以采用如下技术:
    使用1个或者几个线程对数据进行接收/发送处理,建立一个线程池,当数据接收完毕后从线程池中取出闲置的线程对数据进行处理。(使用异步线程)
    —————————————————————————————————
    Let your soul guide you upon your way
    my qq is :131780
      

  3.   

    线程池结构可以应付大量的并发请求,但效率会较低,一般要用到互斥量的。另外最致命的是大量线程的创建、撤销操作严重消耗服务器的资源,导致性能(cup、内存等)下降,我曾测试过该机制,200线程以内可以考虑。
    建议采用回调机制,整体效率会是线程池的数倍,可以参考squid的实现机制。
      

  4.   

    嗯怎么说呢?我所说的线程池指的是thread pool,在进程开始运行的时候启动比如10个线程,当有请求的时候从线程池中取一个线程来处理数据,当处理完数据后线程不结束,而是回收到线程池中。应该不会有线程的创建、撤销等问题。
      

  5.   

    "建议你使用IoCompletion技术",并且要求用户只能使用 NT 系列操作系统.