一直對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文也不是十分好。
這是原文地址,原文里面有測試的,只是要翻牆才能看:
https://marcmutz.wordpress.com/effective-qt/containers/
c++17有望有I/O庫,據說是基於asio提案的。
http://www.qtcn.org/bbs/read-htm-tid-60285.html