原文:https://www.oschina.net/p/t-iophp
舊時王謝堂前燕,飛入尋常百姓家----當年那些王謝貴族們才擁有的"百萬級即時通信"應用,將由於t-io的誕生,紛紛飛入普通人家的屋檐下。css
你們口中的t-io通常是指tio-core,它是基於java aio的網絡編程框架,和netty屬於同類html
基於tio-core來開發IM、TCP私有協議、RPC、遊戲服務器端、推送服務、實時監控、物聯網將會變得空前的簡單。java
t-io家族除了tio-core外,還有tio-websocket-server、tio-http-server、tio-webpack-core、tio-flash-policy-server等,後面所列都是基於tio-core開發的應用層組件webpack
列一下t-io家族成員:git
tio-core:基於java aio的網絡編程框架。使用示例:tio-showcase程序員
tio-websocket-server:基於tio-core開發的websocket服務器。使用示例:tio-websocket-showcaseweb
tio-http-server:基於tio-core開發的http服務器。使用示例:tio-http-server-showcaseapache
tio-webpack-core:基於tio-core開發的js/css/html編譯壓縮工具,代碼已經開源,但尚無使用文檔和示例,暫時屬於內用階段,使用案例:http://www.nb350.com編程
tio-flash-policy-server:基於tio-core開發的flash-policy-server,代碼已經開源,但尚無使用文檔和示例
列一下tio-core應用場景的一些案例
IM:j-im
遊戲服務器端:貝密遊戲
推送服務:牛吧雲播
物聯網:氦氪雲
TCP私有協議:這個太多了,直接看案例列表吧
內置對半包和粘包的處理:源碼分析見:https://my.oschina.net/talenttan/blog/1610690
ChannelContext資源維護:會話資源維護是個工程量大,複雜度高的活,尤爲是涉及到各類資源綁定、解綁、遍歷時,極易出錯和OOM,不過這些複雜的事件tio-core所有給你作好了,除非你要本身額外去綁定資源
心跳檢測(防止不良客戶端佔着TCP鏈接無所事事)
心跳發送(client)
斷鏈重連(client)
流量監控統計,既提供單條ChannelContext流量統計,又提供全部ChannelContext流量統計,下面所列爲部分監控數據,詳情請見:ChannelStat.java和GroupStat.java
已接收的字節數
已接收了多少次TCP數據包
已接收的packet數
已處理的字節數
已處理的packet數
處理消息包耗時,單位:毫秒。拿這個值除以handledPackets,就是處理每一個消息包的平均耗時
已發送的字節數
已發送的packet數
最近一次收到業務消息包的時間(一個完整的業務消息包,一部分消息不算)
最近一次發送業務消息包的時間(一個完整的業務消息包,一部分消息不算)
最近一次收到業務消息包的時間:收到字節就算
最近一次發送業務消息包的時間:發送字節就算
第一次鏈接成功的時間
進入重連隊列時間
userid綁定(將ChannelContext和業務中的userid綁定,並提供查詢、發送、解綁等API供業務端使用,一個userid能夠綁定多個ChannelContext)
org.tio.core.Tio.bindUser(ChannelContext channelContext, String userid):將ChannelContext和userid綁定
org.tio.core.Tio.sendToUser(GroupContext groupContext, String userid, Packet packet):基於userid異步發送消息
org.tio.core.Tio.bSendToUser(GroupContext groupContext, String userid, Packet packet):基於userid阻塞發送消息
org.tio.core.Tio.getChannelContextsByUserid(GroupContext groupContext, String userid):經過userid獲取ChannelContext
org.tio.core.Tio.unbindUser(GroupContext groupContext, String userid):解綁指定的userid
org.tio.core.Tio.unbindUser(ChannelContext channelContext):解綁全部的userid
token綁定(將ChannelContext和業務中的token綁定,並提供查詢、發送、解綁等API供業務端使用,一個token能夠綁定多個ChannelContext)
方法基本同userid綁定,不一一列舉
group綁定(將ChannelContext和羣組綁定,並提供查詢、發送、解綁等API供業務端使用,一個group能夠綁定多個ChannelContext,若是你有IM羣聊場景,這個功能會大大減小你的業務端代碼)
方法基本同userid綁定,不一一列舉
bsId綁定(將ChannelContext和業務id綁定,並提供查詢、發送、解綁等API供業務端使用,一個bsId只能綁定一個ChannelContext)
方法基本同userid綁定,不一一列舉
框架內置自動和ip綁定(將ChannelContext和對端ip綁定,並提供查詢、發送等API供業務端使用)
org.tio.core.Tio.sendToIp(GroupContext groupContext, String ip, Packet packet, ChannelContextFilter channelContextFilter)
org.tio.core.Tio.sendToIp(GroupContext groupContext, String ip, Packet packet)
org.tio.core.Tio.bSendToIp(GroupContext groupContext, String ip, Packet packet, ChannelContextFilter channelContextFilter)
org.tio.core.Tio.bSendToIp(GroupContext groupContext, String ip, Packet packet)
框架內置自動和ip:port綁定(將ChannelContext和對端ip:port綁定,並提供查詢、發送等API供業務端使用)
org.tio.core.Tio.send(GroupContext groupContext, String ip, int port, Packet packet)
org.tio.core.Tio.bSend(GroupContext groupContext, String ip, int port, Packet packet)
框架內置自動和惟一uuid綁定(將ChannelContext和對端uuid綁定,並提供查詢、發送等API供業務端使用)
org.tio.core.Tio.sendToId(GroupContext groupContext, String channelId, Packet packet)
org.tio.core.Tio.bSendToId(GroupContext groupContext, String channelId, Packet packet)
提供IP拉黑功能
org.tio.core.Tio.IpBlacklist.add(GroupContext groupContext, String ip):把指定ip拉黑
org.tio.core.Tio.IpBlacklist.remove(GroupContext groupContext, String ip):從黑名單中移除
org.tio.core.Tio.IpBlacklist.isInBlacklist(GroupContext groupContext, String ip):是否在黑名單中
org.tio.core.Tio.IpBlacklist.clear(GroupContext groupContext):清除黑名單
提供了分頁查詢會話功能
Page org.tio.core.Tio.getPageOfAll(GroupContext groupContext, Integer pageIndex, Integer pageSize)
Page org.tio.core.Tio.getPageOfAll(GroupContext groupContext, Integer pageIndex, Integer pageSize, Converter converter)
Page org.tio.core.Tio.getPageOfGroup(GroupContext groupContext, String group, Integer pageIndex, Integer pageSize
Page org.tio.core.Tio.getPageOfGroup(GroupContext groupContext, String group, Integer pageIndex, Integer pageSize, Converter converter)
異步發送能力(把packet丟到隊列即返回)
Tio.java中以send開頭的方法,譬如sendToAll()、sendToUser()、sendToGroup()等
阻塞發送能力(確認把packet發送到對端後再返回)
Tio.java中以bSend開頭的方法,譬如bSendToAll()、bSendToUser()、bSendToGroup()等
同步發送能力(至關於act機制,須要業務端配合設置synSeq才能完成此功能)
org.tio.core.Tio.synSend(ChannelContext channelContext, Packet packet, long timeout)
基於t-io已經實現了tio-http-server
基於t-io已經實現了tio-websocket-server
基於t-io已經實現了IM能力
提供UDP能力
內置SSL能力,業務層只須要添加一行:https://my.oschina.net/talenttan/blog/1587197
groupContext.useSsl("/cert/xxx.jks", "/cert/xxx.jks", "******");
內置集羣能力,這裏也有一篇關於tio集羣的文章,能夠參考:https://my.oschina.net/zyw205/blog/1827495
org.tio.core.GroupContext.setTioClusterConfig(TioClusterConfig tioClusterConfig)
內置羣組成員排序能力,通常用在直播間成員排序顯示、IM羣組排序顯示等須要排序的場景
groupContext.groups.setChannelContextComparator(Comparator channelContextComparator)
t-io 30萬TCP長鏈接測試報告,見:http://www.javashuo.com/article/p-amxbwwsa-gy.html
tio官網不間斷運行88天,各項監控數據良好,見:https://gitee.com/uploads/images/2018/0607/150205_de698afe_351037.png
在冊案例(更多的案例是不在冊的):https://t-io.org/case/index.html
t-io相關博客:https://www.oschina.net/search?q=t-io&scope=blog&sort_by_time=1
t-io相關討論:https://www.oschina.net/search?q=t-io&scope=bbs&catalog=1&sort_by_time=1
若是你只是想用tio-core,只需引入
dependency>groupId>org.t-iogroupId>artifactId>tio-coreartifactId>version>3.0.6.v20180626-RELEASEversion>dependency>
若是你想用tio-websocket-server,只需引入
dependency>groupId>org.t-iogroupId>artifactId>tio-websocket-serverartifactId>version>3.0.6.v20180626-RELEASEversion>dependency>
若是你想用tio-http-server,只需引入
dependency>groupId>org.t-iogroupId>artifactId>tio-http-serverartifactId>version>3.0.6.v20180626-RELEASEversion>dependency>
查看t-io最新版本
tio-showcase (學習tio-core的最好示例)
tio-websocket-showcase (學習tio-websocket-server的最好示例,這裏有篇文章能夠看一下:https://my.oschina.net/talenttan/blog/1806324)
tio-udp-showcase (學習tio-udp-server的最好示例,這篇博客能夠參考:https://my.oschina.net/talenttan/blog/1823774)
tio-http-server-showcase (用於學習tio-http-server,能夠關注裏面的TestController)
熟練掌握ByteBuffer的使用,這是全部基於aio/nio編程的必修課程,這個懶沒人躲得掉
下載tio-core示範程序:tio-showcase
導入到eclipse或其它ide中
對照helloworld例子和t-io的hello world走一遍
下載t-io源代碼:t-io
簡單地掃一下:org.tio.core.ChannelContext.java
簡單地掃一下:org.tio.core.GroupContext.java
簡單地掃一下:org.tio.core.Tio.java
最好要掌握org.tio.utils.lock.ObjWithLock及其子類(由於多線程環境下,對集合的遍歷、元素刪除、元素添加等操做必須是線程安全的)
個人我的博客能夠關注一下,上面有很多t-io的文章:三流程序員的博客
忠告:tio-core已經封裝了大量網絡開發細節,若是你連上面的步驟都不肯意走一遍,建議你仍是繼續你的CRUD編程。
智能客服系統 + 呼叫中心
服務了上萬家的優質客服系統:優客服 - 開源的智能客服系統 + 呼叫中心
更專業的通用後臺管理模板----layuiAdmin,layui做者親自傾力打造