如何評價 Christopher Kohlhoff 實驗性的 C++ Network 標準庫 ?
著名的 C++ 網路庫 Boost.Asio 作者 Christopher Kohlhoff 大大最近推出了一個實驗性的 C++ 標準網路庫:
chriskohlhoff/networking-ts-impl研究了一下,發現和 asio 其實是一樣子的,之前有大 V 說 cpp-netlib 有很大的可能進標準庫,而根據最近的 C++ 網路標準庫的技術報告:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4656.pdf ,是否預示者 asio 更有可能成為標準?
不過遺憾的是 無論是 asio 還是 networking-ts-impl 都沒有內置的 HTTP 伺服器和客戶端庫。(cpp-netlib 只有? http 伺服器和客戶端支持,而且沒有剝離 Boost 依賴的版本。)
當我詢問 Visual C++ 團隊是否有 Network-TS 開發計劃時, ps://twitter.com/GorNishanov">Gor Nishanov? 大大向我推薦了 networking-ts-impl
所謂大V好像是陳碩還是誰說的我又轉述了一下,不過我轉述的時候說了這個消息不太靠得住。
不過標準在network這一塊一直撲朔迷離啊。。。
我對head-only倒是沒什麼怨念,但是也希望這些東西以後可以做成module的形式降低編譯強度。
既然標準委員會神奇地採納了asio作為network-ts,那麼asio的原作者做一個參考實現也不是什麼奇怪的事情吧。代碼改不多都行。
講真,我並不喜歡header only的庫。
其實我一直覺得ASIO的API風格應該是很對C++標準委員會胃口的,但問題依然不少。
- ASIO在*nix下UDP的性能不佳。
- ASIO完全不管內存分配的問題,所以對基於行的協議比如HTTP之類,很難在如何管理buffer這個問題上達成共識。
- ASIO的async stream concept和現有的stream完全不搭嘎,不想個辦法調和一下會很難看。
- ASIO直到目前為止,還沒有明確layered protocol設計的規範,自帶的SSL怎麼看都不是個好的樣板,所以在networking-ts里把這一塊幹掉了。
- ASIO對磁碟文件的支持基本等於0,有人搞了個AFIO,結果吵吵了兩年還沒進boost,而且這個AFIO和filesystem還沒連在一起。
- ASIO裡面的strand實現實在是太HACK了,但也並沒有什麼好辦法把它搞清爽一點。
隱約記得還有其它問題,想起來再補充。
其實asio的性能是挺好的,關鍵在於你自己要把緩衝區這塊設計好,不能只是簡單使用例子中的方式。1.66中新增加了Beast庫,是在asio基礎上HTTP和ws的封裝,文檔中闡述了很多關於buffer的設計的想法和實現,有興趣的可以關注一下。
等c++的coroutine吧,那時人人可以自己擼自己的網路庫
把asio風格的庫合併到C++標準庫里絕對是在作死,這種不接地氣的庫極難理解也不好用,對初學者來說極不友好,以後恐怕是沒人再願意去學C++了
有人測過asio的性能嗎?為什麼我用asio從來都跑不到300MB/s?ZeroMQ都能跑到800MB/s啊
推薦閱讀:
※C++ 怎麼生成 4096 個函數?
※C 與 C++ 的真正區別在哪裡?
※如何評價 Visual C++ 將整合 Clang 用於開發 Windows 程序?
※編譯 C++ 項目時模板引發的「undefined reference to」問題?
※在哪些領域,C++ 還有著不可替代的優勢?為什麼?