描述
服务端使用完成端口,功能是接收客户端发来的字符串,然后把这个字符串回送给客户端,希望能支持 2-5k个并发数测试要求
客户端分别使用阻塞+多线程 和 完成端口 模拟多个连接
客户端要指定发包的间隔时间,统计每个连接的平均收包时间(就是发包完成后,记录收到包所花的时间;在本机测试,通常只有千分之几秒甚至更少)
进展
现在我在 阻塞+多线程 方式下(只开了200个线程进行测试,模拟200个连接),可以容易的控制每个socket的发包间隔时间和计算收包时间;但在 单线程+完成端口 方式下,没办法做到这两点我遇到的困难
如果客户端使用完成端口,就是用一个线程来管理多个socket,可我需要对每个socket进行 sleep(表示发包的间隔时间),还需要记录每个socket的收包时间。我不能完全控制好每个socket,因为一旦sleep,所有的socket都要阻塞;计算收包时间也非常困难,毕竟只有一个线程;
请求大家解答的问题
是不是只能用阻塞+多线程来编写客户端,模拟多个连接?
如果采用单线程的完成端口,就没办法达到测试要求了吗?
谢谢大家,祝各位同学身体健康

解决方案 »

  1.   

    不知道你Sleep的目的是什么,或许用SleepEx第2参数给TRUE可以解决你现在的问题。
      

  2.   

    完成端口为什么要用单线程?你Send可以使用一个线程提交,但是工作线程还是要的吧?另外Sleep的时间精确度是有限的,不建议小于50ms,最小最小建议不低于15ms.
      

  3.   

    完成端口是由windows管理的线程池吧
    阻塞+多线程 更好控制
      

  4.   

    用非阻塞来写好了
    200个很轻松的,就是2000个也很轻松啊
    当线程数量达到百以上等级的时候
    建议你换模型,否则资源消耗太大了
    PS: N久以前我也用过多线程写这样的程序,后来被我放弃了
      

  5.   

    IOCP是服务器模型啊,没听说过客户端也用IOCP的
      

  6.   

    一个线程是不能很好的完成你的需求的,两个线程,一个线程在不断循环,当想某个时间点通过某个socket发送数据时则向Affair队列表添加一个事务指明该时间点使用该socket发送数据,则循环到该时间点是就发,另外一个线程等待到Recv事件就收,只要有事务我的概念这些都容易解决
      

  7.   

    你不应该每提交一次发送都sleep,而是每提交一轮发送才sleep一次。