java私有协议开发_GitHub - samwen/t-io: t-io是基于java aio的网络编程框架,和netty属于同类。基于t-io来开发IM、TCP私有协议、RPC、游戏服务器端、推送...

t-io是一个基于Java AIO的网络编程框架,与Netty类似,用于简化IM、TCP私有协议、RPC、游戏服务器、推送服务等的开发。它提供心跳检测、断链重连、流量监控等功能,并支持WebSocket、HTTP服务器等应用层组件。通过t-io,可以更轻松地进行网络编程和资源维护。
摘要由CSDN通过智能技术生成

t-io: 让天下没有难开发的网络编程

旧时王谢堂前燕,飞入寻常百姓家----当年那些王谢贵族们才拥有的"百万级即时通讯"应用,将因为t-io的诞生,纷纷飞入普通人家的屋檐下。

t-io是啥

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

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

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

列一下t-io家族成员:

tio-core:基于java aio的网络编程框架。使用示例:tio-showcase

tio-websocket-server:基于tio-core开发的websocket服务器。使用示例:tio-websocket-showcase

tio-http-server:基于tio-core开发的http服务器。使用示例:tio-http-server-showcase

tio-webpack-core:基于tio-core开发的js/css/html编译压缩工具,代码已经开源,但尚无使用文档和示例,暂时属于内用阶段,使用案例:http://www.nb350.com

tio-flash-policy-server:基于tio-core开发的flash-policy-server,使用示例:https://my.oschina.net/talenttan/blog/1558916

列一下tio-core应用场景的一些案例

tio-core提供了哪些功能

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)

内置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,只需引入

org.t-io

tio-core

3.0.6.v20180626-RELEASE

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

org.t-io

tio-websocket-server

3.0.6.v20180626-RELEASE

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

org.t-io

tio-http-server

3.0.6.v20180626-RELEASE

查看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推荐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值