当前位置: 首页 > Web前端 > HTML

国产开源网络编程框架t-io必用:极速开发者Tio.java

时间:2023-03-28 00:51:39 HTML

Tio.java简介为了减少用户查找API的时间,t-io将常用的API以静态方法的形式汇集到一个类中。这是Tio.java。Tio.java本身并没有实现复杂的服务,各个服务的实现仍然是分布式的。在其他类中,Tio.java只收集了用户关心的API,方便IDE搜索。详情请参考:https://www.tiocloud.com/doc/tio/245业务数据绑定资源绑定是指将业务相关的数据与Tcp连接(ChannelContext)相关联。例如ChannelContext-A代表用户张三,其userid为333。使用如下代码绑定Tio.bindUser(ChannelContext-A,"333")t-io目前内置了4个资源绑定。当然,用户可以灵活使用这些绑定来解决业务层的所有资源绑定问题。例如,可以在组中加上前缀“ios-”来标记用户使用的是ios,如Tio.bindGroup(ChannelContext-A,"333");Tio.bindGroup(ChannelContext-A,"ios-"+"333");内置的四种资源绑定方式中,一个ChannelContext可以绑定多个groupid,其他三种绑定都是一对一或者多对一的关系,也就是说一个ChannelContext可以属于group-a,group-b......group-n并在下方发布这4个channelContext,StringbsId){channelContext.tioConfig.bsIds.bind(channelContext,bsId);}/***绑定组*@paramchannelContext*@paramgroup*@authortanyaowu*/publicstaticvoidbindGroup(ChannelContextchannelContext,Stringgroup){channelContext.tioConfig.groups.bind(group,channelContext);}/***bindtoken*@paramchannelContext*@paramtoken*@authortanyaowu*/publicstaticvoidbindToken(ChannelContextchannelContext,Stringtoken){channelContext.tioConfig.tokens.bind(token,channelContext);}/***绑定用户*@paramchannelContext*@paramuserid*@authortanyaowu*/publicstaticvoidbindUser(ChannelContextchannelContext,Stringuserid){channelContext.tioConfig.users.bind(userid,channelContext);}业务数据解绑既然有绑定,就必然有解绑。这是与绑定相反的操作,废话不多说,直接贴出简短的源码.unbind(channelContext);}/***解除与所有组的绑定*@paramchannelContext*@authortanyaowu*/publicstaticvoidunbindGroup(ChannelContextchannelContext){channelContext.tioConfig.groups.unbind(channelContext);}/***解绑指定群组*@paramgroup*@paramchannel上下文*@authortanyaowu*/publicstaticvoidunbindGroup(Stringgroup,ChannelContextchannelContext){channelContext.tioConfig.groups.unbind(group,channelContext);}/***channelContext的解除绑定令牌*@paramchannelContext*@authortanyaowu*/publicstaticvoidunbindToken(ChannelContextchannelContext){channelContext.tioConfig.tokens.unbind(channelContext);}//org.tio.core.TioConfig.ipBlacklist/***取消绑定channelContext*@paramchannelContext*@authortanyaowu*/publicstaticvoidunbindUser(ChannelContextchannelContext){channelContext.tioConfig.users.unbind(channelContext);}/***取消绑定用户ID。一般用于多次登录,开启之前的登录场景异步发送异步发送是指业务层将Packet丢给t-io,立即返回。返回时,不发送Packet,只是提交到待发送队列。异步发送从send开始。这个API有点Many,帖子代码有点长,用图片展示比较舒服BlockingsendBlockingsend:t-io发送Packet给对方后返回Blockingsend是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());