不僅僅是百萬級TCP長連接框架 t-io


t-io: 不僅僅是百萬級TCP長連接框架

  • t-io是基於jdk aio實現的易學易用、穩定、性能強悍、將多線程運用到極致、內置功能豐富的即時通訊框架(廣義上的即時通訊,並非指im),字母 t 寓意talent。
  • 同類型的框架還有voovannettyminabaseio等,不喜歡t-io的可以去嘗試了解這幾個,t-io對所有人按LGPL協議開源,但只服務於品行良好的開發人員!
  • t-io在協議生態全面建立起來前,更多的是適合私有協議TCP連接項目,所以如果你想實現一個復雜的公有協議的產品,可以用協議生態更為完整的其它類似框架。

t-io誕生的意義

  • 舊時王謝堂前燕,飛入尋常百姓家----當年那些王謝貴族們才擁有的"百萬級TCP長連接"應用,將因為t-io的誕生,紛紛飛入普通的個人屋檐下。

常見應用場景

  • IM(官方提供了im例子,含web端)
  • 實時監控
  • 推送服務(已內置API)
  • RPC
  • 游戲
  • 物聯網(已有很多案例)
  • 其它實時通訊類型的場景,不一一列舉

用t-io和layim做的web im

  • 先感謝一下賢心提供這么好的ui作品,也歡迎大家去捐贈獲取layim
  • 東西剛剛出來,還需要打磨,有問題在所難免,畢竟只花了兩天時間。
  • 演示地址(2M帶寬,請勿壓測,謝謝!)
  • 截圖

image

image

maven坐標

    org.t-io tio-core 1.7.1.v20170703-RELEASE 

t-io特點

極簡潔、清晰、易懂的API

  • 沒有生澀難懂的新概念,原生態bytebuffer既減少學習成本,又減少各種中間對象的創建
  • 只需花上30分鍾學習helloworld,就能較好地掌握並實現一個性能極好的即時通訊應用

極震撼的性能

  • 單機輕松支持百萬級tcp長連接,徹底甩開業界C1000K煩惱;
  • 最高時,每秒可以收發500萬條業務消息,約165M(1.6.9版本數據,想驗證的,后面有驗證步驟,1.7.1版本的im由於加入了許多業務功能,所以不能用於測試框架性能)

對開發人員極體貼的內置功能

  • 內置心跳檢測
  • 內置心跳發送
  • 各種便捷的綁定API
  • 各種便捷的發送API
  • 一行代碼擁有自動重連功能
  • 各項消息統計等功能,全部一鍵內置搞定,省卻各種煩惱

鳥瞰t-io

image

各種傳送門

性能測試步驟

測試單機吞吐量(實際上就是非網絡環境啦)

  1. 機器准備
    • CPU: i7 6700 / i7 4790
    • 內存:8G/4G
    • 操作系統:windows7/windows10
    • 說明:客戶機和服務器位於同一台機器
  2. 測試步驟
    • 參數調優:修改t-io\dist\examples\im\client\startup.bat,把-Dtio.default.read.buffer.size的值換成4096
    • 參數調優:修改t-io\dist\examples\im\server\startup.bat,把-Dtio.default.read.buffer.size的值換成4096
    • 雙擊 "bin/start-im-server.bat" 啟動im server
    • 雙擊 "bin/start-im-client.bat" 啟動im client
    • 保持下圖參數進行測試(強調:你需要多試幾次,前面幾次的性能數據是最差的,貌似跟線程池的預熱有關系,有研究的朋友可以交流一下) image
  3. 測試結果
    • 500萬條/秒約165M----此數據系網友提供(i7 6700 + 固態硬盤 + win10)
    • 333萬條/秒約97M----此數據系本人親測數據(i7 4790 + 固態硬盤 + win7),測試參數與上圖略有差別,不一一說明
  4. 測試說明
    • 數據中的消息條數指的是業務包,不是指tcp的交互次數,了解tcp協議的人知道,tcp是雙向確認可靠的傳輸協議,對業務而言,其實並不關心tcp了多少次,而是我們的業務數據收發了多少條。
    • 請用t-io 1.6.9分支進行測試,1.7.0加了鏈路行為跟蹤功能、1.7.1會加上ip防黑功能,這些功能會使t-io框架本身的性能降低(就像操作系統一個開了防火牆,一個沒開防火牆,性能不是一個級別的)。作為一個io框架,其實並不需要實現這些功能,但是為了讓業務層更舒服,t-io還是舍棄了亮眼的性能數據去擁抱更實用的業務層功能。
    • netty是一個知名度極高的一個框架,而且功能更多,t-io如果滿足不了你或不是你的菜,可以嘗試netty

測試centos下可以支持多少長連接數

  1. 機器准備
    • 服務器一台:centos6.x, 虛擬機,一個4核E5 CPU,內存16G
    • 客戶機11台:windows,硬件沒什么特別要求,能跑起1.62萬個長連接,配置不低得離譜就行
  2. 測試步驟

    • 修改centos操作系統參數,使之支持更大的長連接數,細節略(可百度之)
    • 在centos上運行 "bin/start-im-server.sh" 啟動im server
    • 修改dist\examples\im\client\config\app.conf,參考下面的值,注意把server指向centos的ip

      #服務器
      server=127.0.0.1
      
      #服務器port port=9321 #連接多少個連接到服務器 client.count=16200 #進入到哪個組 group=g #聊天消息發的內容 chat.content=he #一次發多少條(這個數字不要太大) send.count=1 
    • 把dist\examples\im\client拷到各客戶機並運行"bin/start-im-client.bat"

  3. 測試結果

    • 11個客戶機 ,每個客戶機連16200個TCP連接,服務器一共承受17.82萬TCP長連接,服務器內存只消耗800M,CPU使用率極低(其中有一台客戶擔任破壞性測試機)
    • 根據測試結果初步推測:樂觀點:t-io支持200萬長連接沒什么問題,保守點:100萬吧,各位有條件的可以測測,畢竟推測的數據有時候會讓人跌眼境。
  4. 測試說明

    • 因為這17.82萬長連接位於同一個組中,你用客戶機發一條消息,服務器就要推送17.82萬條數據,所以在發消息時,請慎重,當然如果你非要把內存、CPU耗光,然后看t-io宕機才高興,只能說t-io不是你的菜,你還是另請高明吧。
    • 這些數據是1.6.9版本測出來的,1.7.0加了鏈路行為跟蹤功能、1.7.1會加上ip防黑功能,這些功能的增加對tcp長連接個數沒什么影響,但是可能內存會增加一些,畢竟多了不少維護數據。
    • 不管怎么說,用在生產環境,不管用什么框架,都是要自己測一遍的,有問題可以隨時找作者,不接受惡意找茬,同時作為開源免費軟件,作者也有權拒絕一切服務,這點請知悉----開源,只是把代碼本身按照某種協議貢獻出來,並無義務給你服務,你用得不爽,請另請高明。
    • netty是一個知名度極高的一個框架,而且功能更多,t-io如果滿足不了你或不是你的菜,可以嘗試netty

ab test

  1. 機器准備
    • 服務器一台:windows7 ssd i7-4790
  2. 測試步驟及結果
    • 運行org.tio.http.server.demo1.HttpServerDemo1Starter.java
    • 測試腳本及測試結果見圖,大家應該都看得懂,也歡迎大家下載更換參數進行測試 image

t-io學習步驟(供參考,具體步驟根據各人而異)

學習t-io的最好方式,是從helloworld的例子入手,順瓜摸藤閱讀t-io的源代碼,已經有很多人閱讀過t-io的源代碼,譬如j-net的作者、hutool的作者、天蓬小豬守護天使,並且反饋良好,源代碼畢竟只有3000多行,讀讀無妨!如果懶於閱讀代碼,就按照下面的步驟來學習吧!

初步認識t-io

  • 安裝1.7以上版本的jdk及maven(已安裝的略過此步驟)
  • https://git.oschina.net/tywo45/t-io處下載源代碼(已下載的略過此步驟)
  • 雙擊 "bin/start-im-server.bat" 啟動im server
  • 雙擊 "bin/start-im-client.bat" 啟動im client
  • 對着界面把玩幾下,測試一把性能數據,對t-io形成感性認識(注意:好的性能數據需要預熱幾把,讓線程池活起來)

了解代碼目錄結構

所有工程都是maven工程,后續目錄有可能稍有變動,不定期更新

├─bin----------------腳本目錄(方便快速操作)
│      clean.bat----------------清空所有工程的target目錄 │ clean.sh │ deploy.bat----------------作者用來發布到maven中心倉庫的腳本,放出來主要是供大家參考 │ deploy.sh │ dist-examples.bat----------------把所有的例子打包到dist目錄,方便用戶直接執行 │ dist-examples.sh │ install.bat----------------安裝工程到本地倉庫 │ install.sh | start-http-server.bat----------------啟動tio-httpserver │ start-helloworld-client.bat----------------啟動helloworld的客戶端 │ start-helloworld-client.sh │ start-helloworld-server.bat----------------啟動helloworld的服務端 │ start-helloworld-server.sh │ start-im-client.bat----------------啟動im的客戶端 │ start-im-client.sh │ start-im-server.bat----------------啟動im的服務端 │ start-im-server.sh │ start-showcase-client.bat----------------啟動showcase的客戶端 │ start-showcase-client.sh │ start-showcase-server.bat----------------啟動showcase的服務端 │ start-showcase-server.sh ├─docs │ │ │ ├─blog----------------本人博客草稿(大部分博客是在線編輯,所以此處就沒有了) │ │ │ ├─performance----------------一些性能測試截圖(隨着版本的增多,有些截圖已經過時,但仍保留) │ │ │ ├─release----------------新版本發布時的log │ ├─dist----------------成品 │ └─examples----------------用t-io寫的例子成品 │ ├─helloworld │ │ ├─client----------------helloworld的客戶端 │ │ └─server----------------helloworld的服務端 │ ├─im │ │ ├─client----------------im的客戶端 │ │ └─server----------------im的服務端 │ └─showcase │ ├─client----------------showcase的客戶端 │ └─server----------------showcase的服務端 └─src ├─core----------------t-io的核心代碼 ├─zoo----------------t-io的生態圈 │ ├─http----------------用t-io實現的http服務器 │ ├─websocket----------------用t-io實現的websocket服務器 ├─example----------------用t-io寫的例子的源代碼 │ ├─parent----------------例子的maven parent │ ├─helloworld----------------helloworld的源代碼 │ │ ├─client │ │ ├─common │ │ └─server │ ├─im----------------im的源代碼 │ │ ├─client │ │ ├─common │ │ └─server │ └─showcase----------------showcase的源代碼,這個例子是為了幫助用戶學習t-io專門寫的 │ ├─client │ ├─common │ └─server └─parent----------------maven工程的parent 

導入t-io官方提供的例子

t-io碼雲托管地址下載源代碼及例子,里面的showcase例子是專門為學習t-io而寫的,其設計也是准生產級別的,可以直接拿來做您項目的手腳架。下載完成后,請按下面步驟導入到eclipse中

image

image

image

學習萬能的helloworld例子

花30分鍾看一下t-io官方提供的helloworld,了解一下TCP編程的大概流程,文檔傳送門: t-io的hello world

學習用於進階的showcase例子

showcase一詞是從springside借來的,放這很應景,天蓬元帥就是這樣學習的,可以和他交流,他后面會出詳細的教程。

列一下作者本人用過的國產開源軟件

網上很多人對國產開源的印象還停留在n年前,此處列一下作者本人一直在用的部分國產開源軟件,其中有的是有爭議的,也有暴過漏洞的,但是我們想一下struts、netty、mongodb這些國外知名軟件不也暴過嚴重漏洞嗎?

  1. https://www.oschina.net/p/weixin-java-tools-new (使用一年)
  2. http://layim.layui.com(2017年5月11號開始使用)
  3. https://www.oschina.net/p/ztree (使用五年以上吧)
  4. https://www.oschina.net/p/echarts (使用兩年以上吧)
  5. http://git.oschina.net/tywo45/talent-validate (使用十年了,開源出來有五年以上吧,原來是博客開源,現在移到開源中國了)
  6. https://www.oschina.net/p/hutool(懶 人必備,強烈推薦,使用兩個月)
  7. https://www.oschina.net/p/t-io(使用五年了,開源出來半年)
  8. https://www.oschina.net/p/druid(使用三年以上吧)
  9. https://www.oschina.net/p/dubbo(使用兩年)
  10. https://git.oschina.net/jfinal/jfinal-weixin(使用一年左右)
  11. https://www.oschina.net/p/fastjson(使用三年以上)

 

http://www.oschina.net/p/t-io


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM