我做了一个服务器程序,由于我的程序要时时接收数据因此显的很慢,程序界面有时呈现不反应状态。大家有没有好的具体的建议,我如何才能把这个程序编好呢?(急)
我用的是CASYSOCKET 类,大致的方法如下:每获得一个连接我就生成一个SOCKET 对象,把他加入一个队列当中,对于接收数据我则用::OnReceive函数接收数据。
请大家多发表意见,帮我把这个任务顺利完成,多谢。

解决方案 »

  1.   

    我也不会做server,因为考虑的太多,最好是那为高手详细说说,我门学习。帮你顶
      

  2.   

    对于服务器最基本的是稳定压倒一切,然后才是效率问题。
    把数据收发等I/O操作和协议解析分开,一般协议解析比较慢,业务处理更慢;
    利用多个线程处理数据,数据接收线程组织数据,然后分别给各个处理线程喂食;注意避免资源竞争。
    “线程不能太多”做好能根据CPU数和处理能力分配适当数量的线程。
    网络数据的接受注意接受分包的重组,注意数据收发超时,具体的参考各个OS的socket的实现资料,选择比较好实现的I/O操作方式。
    没有经过组织比较混乱,希望对楼主有用。
      

  3.   

    至今为止,还没一种I/O方式可以与完成端口相比美,借助于windows的重叠机制,再加几个线程就可以大量接收客户连接,我试了一下,每200毫秒有一个客户连接,我的内存(256)用完了服务才死掉。
      

  4.   

    据说linux的epoll比iocp还要强大.
      

  5.   

    建议用IOCP来编写服务器程序。
      

  6.   

    sharkhuang(爱情和程序都读不懂) :
    没去研究Linux的东西,也没听说epoll比iocp强,不知道是否真实?
    让后面的高手来说说看。
      

  7.   

    做Windows的网络应用还使用完成端口吧。