一直对Qt官方的QtNetwork模块抱有遗憾,Qt自带的网络模块用的是select模型,无法支持高并发的服务器开发。最近在网上看到有个libevent for qt的东西,它直接替换了Qt的select模型,支持epoll模型,所以就支持高并发了。这东西好啊,弥补了Qt的不足,也弥补了我的遗憾。我兴致勃勃的从网上下载了源代码(github地址:​​https://github.com/sjinks/qt_eventdispatcher_libevent​​),然后在windows上编译,结果每次都报错,不知道为什么。有人用过这个吗?求指教。

 

这个效果不怎么好的,我当初测试过libev做底层的,在linux下,但是效果和不使用差不多的,大并发同样有glib的erro的。也可能是我当初使用的不对吧。

针对做服务端性能不佳,最好的是不使用QT 的network模块,用其他的库做主力,然后使用Qt Core里面的一些东西代替stl和boost的。

如果还是想QT的事件循环为主,我写过一个解决方案:​​https://github.com/dushibaiyu/QAsioSocket​

你可以测试下,这个是底层用的asio。

 

可以的,只是,Qt的socket不支持跨线程收发消息的。你需要用信号槽来回中转。

但是如果你用asio的socket的话是没有问题的。

如果只是Qt的话,我也写过相关的线程池的实现:https://github.com/dushibaiyu/QtTcpThreadServer

这个充分利用Qt线程和事件循环的。

这个是简单的说名:http://www.dushibaiyu.com/2013/12/qtcpserver%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%AE%9E%E7%8E%B0.html

 

boost::asio用起来很方便的,如果你觉得一个月学习周期。

 

我关注过golang。没系统学习和使用过。

至于那个效率高,纯echo的没有意义,关联业务之后,那就是开发者和架构的设计了。

理论上说是boost效率更高的。但是boost的学习曲线不好弄得。

我现在也没系统学习过boost,我封装asio是利用C++11 版的asio,可以不依赖boost的(定时器和序列化除外)。

至于你说boost大,你现在也没必要完全去学习的,根据需要着重学习吧。

我当初也用过Qt Core模块去代替boost的很多处理的。

boost的可怕不是多大,是boost的编码风格可读性较差,容易蚕食代码的,还有就是boost的api接口没有那么直观。

我当年在知乎的提问,你可以参考下:​​http://www.zhihu.com/question/22503121​

 

 

qt的优势是功能强大,性能稍微差了点。同样功能肯定比boost差不少。

 

性能,差距很小。但是Qt network和boost.asio的差距是很明显的。

给你几个博客你自己感觉吧。

关于信号槽的:

​http://www.dushibaiyu.com/2015/07/qt-signals-slots-connect.html​

关于容器的:

​http://www.dushibaiyu.com/2014/11/stl-vs-qtl-1.html​

​http://www.dushibaiyu.com/2014/11/stl-vs-qtl-2.html​

​http://www.dushibaiyu.com/2014/12/stl-vs-qtl-3.html​

容器的是翻译的,没有翻译完,我e文也不是十分好。

c++17有望有I/O库,据说是基于asio提案的。