國產開源網路程式設計框架t-io使用必備:極速開發器Tio.java
Tio.java簡介
- 為了讓使用者減少查詢API的時間,t-io把常用API以靜態方法的形式彙集於一個類,這就是Tio.java
-
Tio.java本身並不實現過複雜的業務,各業務實現仍然分佈在其它類中,Tio.java只是把使用者關心的API集中起來,便於用IDE查詢而已
業務資料繫結
-
資源繫結是指把業務相關的資料和Tcp連線(即ChannelContext)關聯起來,譬如ChannelContext-A代表了使用者張三,張三的userid是333,就用下面的程式碼進行繫結
Tio.bindUser(ChannelContext-A, "333")
-
t-io目前內建了4種資源繫結,當然使用者可以靈活使用這些繫結從而解決業務層所有的資源繫結問題,譬如可以給group加字首”ios-“,從而標記這個使用者使用的是ios,譬如
Tio.bindGroup(ChannelContext-A, "333");Tio.bindGroup(ChannelContext-A, "ios-" + "333");
-
內建的4種資源繫結方法中,一個ChannelContext是可以繫結到多個groupid的,其它三個繫結都是一對一或多對一的關係,也就是說一個ChannelContext可以同時屬於group-a,group-b… …group-n
-
下面貼一下這4個資源繫結的原始碼
/** * 繫結業務id * @param channelContext * @param bsId * @author tanyaowu */ public static void bindBsId(ChannelContext channelContext, String bsId) { channelContext.tioConfig.bsIds.bind(channelContext, bsId); } /** * 繫結群組 * @param channelContext * @param group * @author tanyaowu */ public static void bindGroup(ChannelContext channelContext, String group) { channelContext.tioConfig.groups.bind(group, channelContext); } /** * 繫結token * @param channelContext * @param token * @author tanyaowu */ public static void bindToken(ChannelContext channelContext, String token) { channelContext.tioConfig.tokens.bind(token, channelContext); } /** * 繫結使用者 * @param channelContext * @param userid * @author tanyaowu */ public static void bindUser(ChannelContext channelContext, String userid) { channelContext.tioConfig.users.bind(userid, channelContext); }
業務資料解綁
-
既然有繫結,就肯定會有解綁,這是個和繫結相反的操作,所以話不多說,直接貼出不長的原始碼
/** * 解綁業務id * @param channelContext * @author tanyaowu */ public static void unbindBsId(ChannelContext channelContext) { channelContext.tioConfig.bsIds.unbind(channelContext); } /** * 與所有組解除解綁關係 * @param channelContext * @author tanyaowu */ public static void unbindGroup(ChannelContext channelContext) { channelContext.tioConfig.groups.unbind(channelContext); } /** * 與指定組解除繫結關係 * @param group * @param channelContext * @author tanyaowu */ public static void unbindGroup(String group, ChannelContext channelContext) { channelContext.tioConfig.groups.unbind(group, channelContext); } /** * 解除channelContext繫結的token * @param channelContext * @author tanyaowu */ public static void unbindToken(ChannelContext channelContext) { channelContext.tioConfig.tokens.unbind(channelContext); } // org.tio.core.TioConfig.ipBlacklist /** * 解除channelContext繫結的userid * @param channelContext * @author tanyaowu */ public static void unbindUser(ChannelContext channelContext) { channelContext.tioConfig.users.unbind(channelContext); } /** * 解除userid的繫結。一般用於多地登入,踢掉前面登入的場景 * @param tioConfig * @param userid * @author: tanyaowu */ public static void unbindUser(TioConfig tioConfig, String userid) { tioConfig.users.unbind(tioConfig, userid); }
非同步傳送
-
非同步傳送,指的是業務層把Packet丟給t-io後立即返回,返回時Packet並沒有被髮送,而只是提交到了待傳送佇列
-
非同步傳送都是以send開頭的,這個API有點多,貼程式碼有點長,用圖片展示更舒適些
阻塞傳送
-
阻塞傳送:t-io把Packet送給對方後才返回
-
阻塞傳送都是以bSend開頭的,這個API有點多,貼程式碼有點長,用圖片展示更舒適些
如何獲取ChannelContext
-
前面的業務資料繫結,一個重要的目的就是要根據那些業務標識來獲取ChannelContext,譬如你繫結了一個userid,那麼後面就可以通過這個userid來獲取ChannelContext
-
獲取ChannelContext的API都是以get開頭的,這個API有點多,貼程式碼有點長,用圖片展示更舒適些
斷開連線和移除連線
-
斷開連線都是以close開頭的方法,指的是把當前已經連上的TCP連線斷開掉
-
移除連線都是以remove開頭的方法,指的是徹底拋棄這個連線
注意
-
如果是用t-io做TCP伺服器端
- 上面兩個方法是等價的,因為伺服器不存在重連一說
-
如果是用t-io做TCP客戶端,並且沒有配置重連
- 上面兩個方法也是等價的,因為不需要重連,tio斷開連線後就會釋放該連線全部資源
-
如果是用t-io做TCP客戶端,並且配置了重連規則,上面兩個方法才是有區別的,區別如下
- close(): 不釋放相關資源,並且會進行重連
- remove():完全釋放相關資源,不再進行重連
叢集通知
-
t-io是內建叢集功能的,作為與業務不相關的io框架,內建叢集功能是件費力卻不見得討好的事(為啥不討好?譬如會增加程式碼複雜度、會降低tio-mvc在TFB上的跑分排名),但t-io考慮到廣大使用者的呼聲,還是內建了叢集功能
-
目前t-io提供的訊息傳送功能,都是支援叢集的,這個從Tio.java的原始碼中就能看出來
-
叢集通知類API都是以notifyCluster開頭的,見圖
t-io拉黑IP
簡單到極致,只需要一行程式碼
Tio.IpBlacklist.add(tioConfig, channelContext.getClientNode().getIp());
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006579/viewspace-2852651/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 國產開源網路程式設計框架t-io的炸裂效能介紹之30W長連線併發程式設計框架
- 深度學習開發必備開源框架深度學習框架
- t-io 3.7.5 釋出,口碑炸裂的國產網路程式設計框架程式設計框架
- 國產開源網路框架t-io的炸裂效能之每秒處理1051萬條聊天訊息框架
- BAT必備500道面試題:設計模式+開源框架+併發程式設計+微服務等免費領取!BAT面試題設計模式框架程式設計微服務
- 網路程式設計框架t-io的程式設計基本知識介紹程式設計框架
- Java程式設計師必備:微服務+開源框架+架構基礎+高效能架構+設計模式Java程式設計師微服務框架架構設計模式
- 《Linux網路開發必學教程》6_Window 下的網路程式設計Linux程式設計
- 2019前端工程師必備前端開發資源必備前端工程師
- 《Python黑客程式設計之極速入門》正式開課Python黑客程式設計
- 實驗三:JFinal極速開發框架實驗框架
- 《Linux網路開發必學教程》12_TCP通訊框架:服務端設計LinuxTCP框架服務端
- KCommon-使用Kotlin編寫,基於MVP的極速開發框架KotlinMVP框架
- 《Linux網路開發必學教程》1_網路程式設計核心概念與模式Linux程式設計模式
- 快速開發外掛emmet,前端程式設計師炫技必備!前端程式設計師
- Java程式設計師必備的工具和框架Java程式設計師框架
- Java 開發者 必備的工具 和 框架Java框架
- 開發網站的必備技能網站
- 前端開發者必備的程式碼開源平臺,記得收藏轉發!前端
- Java開發需要掌握哪些技術?Java程式設計師必備技能Java程式設計師
- 《Linux網路開發必學教程》2_服務端程式設計初體驗Linux服務端程式設計
- 《Linux網路開發必學教程》18_網路通訊框架的完善Linux框架
- 程式設計師必備裝備!程式設計師
- Mac程式設計師開發必備的SVN管理工具:Cornerstone for MacMacC程式程式設計師
- Flutter 必備開源專案Flutter
- 網際網路通訊雲 PaaS 選型 開發者必備指南
- kestrel網路程式設計--開發redis伺服器程式設計Redis伺服器
- 【史上最全】設計師必備的83個設計資源網站網站
- 要想程式設計效率高,熟悉t-io很必要,省去你的APP中自己開發網路通訊的模組程式設計APP
- 10個必備的機器學習開源工具機器學習開源工具
- FFmpeg開發筆記(六十)使用國產的ijkplayer播放器觀看網路影片筆記播放器
- Android開發者必備:推薦一款助力開發的開源APPAndroidAPP
- Java程式設計師必備的10個大資料框架!Java程式設計師大資料框架
- Mac 開發必備工具Mac
- Aveva Marine VBNET 程式設計系列-搭建開發框架程式設計框架
- .NET開發不可錯過的25款必備工具,徐彙區網站設計網站
- linux嵌入式程式設計開發必備知識,這些你都要知道Linux程式設計
- 網路爬蟲開發常用框架爬蟲框架