Chinaunix

标题: 【Boost】【Asio】建立连接的过程需要很大成本吗? [打印本页]

作者: fender0107401    时间: 2015-07-30 15:02
标题: 【Boost】【Asio】建立连接的过程需要很大成本吗?
我在设计一个小型服务器,需要不停的接收另一个程序的指令,对时间要求非常的高。

为了简化流程,我非常希望做成同步模式的(就是服务器端监听一个端口,只能一个一个处理的那种)。

所以,想问问这个建立连接的成本是不是比较高(这个概念确实有点模糊)?

还有一个问题,

如果程序A和B给服务器发送请求,服务器在处理A的请求时,是不是B就会处在等待状态,等服务器处理完了A的请求以后,服务器再处理B的请求。

我担心,服务器处理完A的请求以后就不处理B了。

貌似这个担心是多余的。


作者: windoze    时间: 2015-07-30 21:26
那你就别用ASIO了呗,直接用普通的socket同步读写处理,这样又快又简单。
作者: fender0107401    时间: 2015-07-31 08:31
回复 2# windoze

我不会啊,就只会用ASIO。   
作者: sxcong    时间: 2015-07-31 08:42
这种做成HTTP请求比较好,请求返回再执行下一个。

作者: cokeboL    时间: 2015-07-31 08:49
对时间要求能有多高。。。
作者: fender0107401    时间: 2015-07-31 09:00
cokeboL 发表于 2015-07-31 08:49
对时间要求能有多高。。。


需要到毫秒。
作者: lxyscls    时间: 2015-07-31 10:00
localhost ms妥妥的,公网环境 怎么保证
作者: cokeboL    时间: 2015-07-31 10:31
回复 6# fender0107401


    通信是  1v1  还是  1v多  还是  多v1  啊
作者: fender0107401    时间: 2015-07-31 10:40
回复 8# cokeboL

server是1个,多个client。

频率不高,但是要求速度。


   
作者: yulihua49    时间: 2015-07-31 18:35
本帖最后由 yulihua49 于 2015-07-31 18:53 编辑
fender0107401 发表于 2015-07-30 15:02
我在设计一个小型服务器,需要不停的接收另一个程序的指令,对时间要求非常的高。

为了简化流程,我非常 ...

这个很简单啊。可以采用TPC模型(thread per connection),tpool(thread pool)模型都可以。
一个线程accept,收到连接请求提交给其他线程处理。由于有很多线程在处理,也有很多核在处理,所以可以有并行度的。
连接的开销比较大,而且是一个线程在处理,所以不建议短连接,还是一次连接多次请求/应答比较好。
你说的单线程处理多连接,可以理解为一个线程的线程池。你怕等待,就弄成多个线程的线程池。
一个线程的异步,也是串行处理。最好是多线程异步。也可以多线程协程。
响应时间取决于你的业务。即使做不到一毫秒一个业务,至少可以做到一秒1000个业务,通过并行处理。

另外建议客户端采用连接池技术,事先连接好若干个连接,使用时只需要请求/应答,这大大减少响应时间。
如果有很多客户端,本身就是并行的。如果客户端数量不多,可以采用多线程+连接池进行并行处理。
作者: fender0107401    时间: 2015-08-01 09:40
本帖最后由 fender0107401 于 2015-08-01 09:40 编辑

@yulihua49

我想了一下,你说的这个方法性能会很好,而且实现起来也简单。

就弄成每个线程一个链接的形式。
作者: yulihua49    时间: 2015-08-01 19:16
本帖最后由 yulihua49 于 2015-08-01 19:37 编辑
fender0107401 发表于 2015-08-01 09:40
@yulihua49

我想了一下,你说的这个方法性能会很好,而且实现起来也简单。

TPC不能承受大量连接。我们在前端设置一个转发器,它采用TPOOL,接受大量连接(w级)对后端建立连接池(对后端的有限连接),在二者间转发数据。这样,虽然后端是TPC,但不会产生大量线程。

这是一个非常成功的方案。后端的TPC,资源控制很简单(无需异步,协程等等)专心处理业务,可靠性好。前端负载能力大,抗攻击性好,连接池容易实现容错,分布负载均衡,交易路由处理等资源管理工作。这称为交易管理器,只负责管理资源,不负责处理业务。它可以采用异步,协程等技术。由于与具体业务无关,可以做成通用部件。

这个方案,转发需要一点点时间,但不会减少交易吞吐量。转发器采用与后端完全相同的协议,因此完全是透明的。客户端可以跳过转发器直接连服务器,用于测试转发器性能。正式的生产不允许跳过。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2