TO: Yousjj(喵喵猫) ( ) 信誉:100 我目前没有使用CRC效验,等基本功能完成以后再使用CRC.TO:oyljerry(【勇敢的心】→ ㊣Pray For her√㊣)这个问题我已经解决了,我是封装了一个queue队列,里面使用了临界区对象进行互锁.我现在又把服务端改了一下,现在使用了事件模型,把收数据和发数据放到了一个线程来完成.另一个线程则是处理数据.

解决方案 »

  1.   

    差不多是这样。
    业务线程可以多几个,2 - 8个应该够用了。只一个业务线程恐怕响应速度会太慢
    windoze服务器的话用重叠IO效率可以稍微提高一点,如果是linux服务器建议使用poll或者epoll
      

  2.   

    顺便说一下:如果使用重叠IO/poll/epoll的话,IO线程就只需要一个了。
      

  3.   

    是windows环境下做的,没有用过重叠模型,估计对于UDP协议也用不着这个模型.
      

  4.   

    楼主好啊,你说“UDP不能并发读写”是什么意思呢?是UDP协议不支持吗?另外我也在弄UDP的即时通软件,欢迎来看看
    http://community.csdn.net/Expert/topic/4428/4428750.xml?temp=.4422724
      

  5.   

    TO: gohappy_1999(碧水蓝天) ( ) 信誉:100 这个问题我也很不太清楚,对于UDP协议套接好也没有一个好的模型来控制它的写,那如果UDP服务器要做同步工作的话,我想客户量大的话服务器的效率一定很低因为要读的话就要锁定写,要写的时候就要锁定读.
      

  6.   

    ps:抱歉,我不知道怎样发表新文章,我也有电udp的问题,进来讨论一下,谢谢‘UDP接收数据必须使用recv(  * , MAX_LEN , * )
    这样每次都必须收一个完整包.假设我的数据包类似与
    struct packet
    {
       int len ;
       char * data;
    }
    data的长度是由len指定,但是我的目的每次要先读长度,再将数据收到我需要的位置(每次
    不一样).
    按照UDP每次必须收一个包这样下来,我必须把数据先收到UDP的缓存再拷贝到我需要的目的
    地,而不能像TCP那样直接收到我需要的位置.数据量大的时候拷贝效率不是非常低吗?请教
     
    附:我的udp 端口有很多类型的包,而且通信的对象也有很多
      

  7.   

    IO重叠?UDP用IO重叠有意义吗?
      

  8.   

    我发现windows I/O模型好像专门为TCP协而设计的,所以感觉基于UDP协议还不如用咀噻模式,不知各位有什么看法,在网上找了好久UDP服务器源码都没有找到.
      

  9.   

    data的长度是由len指定,但是我的目的每次要先读长度,再将数据收到我需要的位置
    ---------------------
    UDP不是流协议 要么全部接收一个完整的包 要么一点也接收不到
      

  10.   

    我发现windows I/O模型好像专门为TCP协而设计的,所以感觉基于UDP协议还不如用咀噻模式,不知各位有什么看法,在网上找了好久UDP服务器源码都没有找到.
    ------------------
    同感 UDP没必要用IOCP模式 直接用阻塞的就行 最重要的是数据接收和数据处理分开