ascs demo解释(三):concurrent_client + concurrent_server

31 篇文章 1 订阅
31 篇文章 0 订阅

QQ交流群:198941541

这个组合用于测试并发性(乒乓测试),在concurrent_client里面指定连接数量和最大的可接受延迟,然后开始测试,它会定时检测服务端的响应时间,如果超过最大延迟就断开这条连接,所以最后稳定下来之后的连接数量,就是在满足这个最大延迟情况下,服务端支持的最大连接数,测试永不停止,直到输入quit退出concurrent_client。

这个测试中你会发现,当业务逻辑(消息原样返回)非常简单时,用1个service线程也许能达到最高的吞吐量,这说明在极端情况下,线程的切换也会影响总吞吐量的。

我们先看看concurrent_client里面都演示了些什么:最大连接数限制(宏ASCS_MAX_OBJECT_NUM),开启对象池(宏ASCS_REUSE_OBJECT),消息大小限制(宏ASCS_MSG_BUFFER_SIZE)。

再看看echo_socket的构造函数,里面的unpacker()->stripped(false);意思是,让解包器解包的时候,不要剥离协议部分,这有什么用呢?当你的业务是转发消息时,那么不剥离协议部分的消息就可以直接发送(direct_send_msg)而不需要打包。

 

再看看concurrent_server,它演示了连接对象的预创建(宏ASCS_ASYNC_ACCEPT_NUM),如果socket(不是指绝对的SOCKET,你可以把所有业务都放在从ascs的socket继承的对象里面)的创建非常复杂和耗时,可以在监听开始之前创建足够多的socket,这样每次连接到达之后,可以迅速地accept它们,注意ascs的默认行为是每当accept一条连接之后,会马上又创建一个socket并再次开始async_accept,这一步你可能并不想要,因为我们已经创建了足够多的socket,而且创建socket又复杂和耗时,此时可以这样:

	virtual void start_next_accept()
	{
		if (size() + 10 >= ASCS_ASYNC_ACCEPT_NUM) //only left 10 async accepting operations
			server_base<echo_socket>::start_next_accept();
		else
			puts("stopped one async accepting.");
	}

这段代码的意思是,当我们用完了所有(总共ASCS_ASYNC_ACCEPT_NUM个)预创建的socket之后,仍然保留10个async_accept(以表示我们还活着,当然你也可以在用完了之后完全停止async_accept或者停止监听,看你自己的需要)。

再看看我们重写的on_accept函数里面到底做了些什么:

virtual bool on_accept(object_ctype& socket_ptr) {asio::ip::tcp::no_delay option(true); socket_ptr->lowest_layer().set_option(option); return true;}

这里其实演示了如何设置socket的属性,我说过我不是包装asio,而是组合asio,所以asio有的东西,我不会再包装,而是通过next_layer和lowest_layer接口直接将asio对象暴露出来,所以必要的时候,你还需要了解一些asio的知识。

另外友情提示一下,这组测试在windows上开启多个service线程时(我试的是8个),会几乎占用所有cpu资源,造成按关机键都关不了电脑,ctrl+alt+del也不好使,最好不要将窗口切换到后台,否则你很难再切换回来,但测试是在进行的,输入quit也是能结束测试的(只是输入quit之后,可能要等好久才能被程序读取到),程序并没有出错。

上一篇:ascs demo解释(二):echo_client + echo_server

下一篇:ascs demo解释(四):pingpong_client + pingpong_server, socket_management

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值