很简单的同步socket,服务端起新线程处理客户端请求,小数据量传递数度还可以,服务端每次的recv,send耗时都是0ms,接着来一次从服务端获得1m的数据,速度也凑合,问题出客户端在recv这个1m的数据后,再一次send几个字节去获取一个很小的数据时,服务端的recv耗时500ms,不知道为什么?新起连接和用原连接都有该问题。

解决方案 »

  1.   

    你是如何得出来的时间?总不会不管有没有数据,就recv吧,这样肯定会时间长的
      

  2.   

    最开始时是发现客户端有停顿后来就加了时间记录
    请求A:发送10字节,返回10字节
    请求B:发送10字节,返回1M字节
    请求序列
    A  
    A
    B
    A两种情况,
    1、每次新建立连接用的是服务端记录的时间:在recv的前后加了GetTickCount,
    2、客户端保持连接的情况是循环执行请求序列,记录每个请求的发送、接收、完成的3个时间,比较同样的请求在是否跟在一个有大数据量返回的请求后面的时间差异
    两种情况下,前三个请求在服务端的recv耗时为0,最后一个A在服务端的recv耗时为500多ms
      

  3.   

    recv 是阻塞函数,没有数据的话一直等待,耗费的时间包括等待的时间