【Socket----T-IO】T-IO介绍

一、什么是T-IO

1.大家口中的t-io一般是指tio-core,它是基于java aio的网络编程框架,和netty属于同类

2.基于tio-core来开发IM、TCP私有协议、RPC、游戏服务器端、推送服务、实时监控、物联网、UDP、Socket将会变得空前的简单。

3.t-io家族除了tio-core外,还有tio-websocket-server、tio-http-server、tio-webpack-core、tio-flash-policy-server等,后面所列都是基于tio-core开发的应用层组件

4.t-io家族成员:

二、tio-core提供了哪些功能

1.内置对半包和粘包的处理:源码分析见:https://my.oschina.net/talenttan/blog/1610690

2.ChannelContext资源维护:会话资源维护是个工程量大,复杂度高的活,尤其是涉及到各种资源绑定、解绑、遍历时,极易出错和OOM,不过这些复杂的事件tio-core全部给你做好了,除非你要自己额外去绑定资源

3.心跳检测(防止不良客户端占着TCP连接无所事事)

4.心跳发送(client)

5.断链重连(client)

6.流量监控统计,既提供单条ChannelContext流量统计,又提供所有ChannelContext流量统计,下面所列为部分监控数据,详情请见:ChannelStat.javaGroupStat.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性能

四、t-io生态

五、引入t-io

如果你只是想用tio-core,只需引入

<dependency>
	<groupId>org.t-io</groupId>
	<artifactId>tio-core</artifactId>
	<version>3.0.7.v20180628-RELEASE</version>
</dependency>

如果你想用tio-websocket-server,只需引入

<dependency>
	<groupId>org.t-io</groupId>
	<artifactId>tio-websocket-server</artifactId>
	<version>3.0.7.v20180628-RELEASE</version>
</dependency>

如果你想用tio-http-server,只需引入

<dependency>
	<groupId>org.t-io</groupId>
	<artifactId>tio-http-server</artifactId>
	<version>3.0.7.v20180628-RELEASE</version>
</dependency>

查看t-io版本列表

六、用于学习t-io各组件的showcase工程

七、t-io番外

八、学习tio-core的步骤

  • 熟练掌握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编程。

九、t-io推荐

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值