开源一个自用的Android IM库,基于Netty+TCP(2),c毕业设计参考题目是什么

我们根据自定义的消息类型来编写proto文件。 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 然后执行命令(我用的mac,windows命令应该也差不多): 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 然后就会看到,在和proto文件同级目录下,会生成一个java类,这个就是我们需要用到的东东: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 我们打开瞄一眼: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 东西比较多,不用去管,这是google为我们生成的protobuf类,直接用就行,怎么用呢?直接用这个类文件,拷到我们开始指定的项目包路径下就可以啦: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 添加依赖后,可以看到,MessageProtobuf类文件已经没有报错了,顺便把netty的jar包也导进来一下,还有fastjson的: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 建议用netty-all-x.x.xx.Final的jar包,后续熟悉了,可以用精简的jar包。

至此,准备工作已结束,下面,我们来编写java代码,实现即时通讯的功能。


封装

为什么需要封装呢?说白了,就是为了解耦,为了方便日后切换到不同框架实现,而无需到处修改调用的地方。举个栗子,比如Android早期比较流行的图片加载框架是Universal ImageLoader,后期因为某些原因,原作者停止了维护该项目,目前比较流行的图片加载框架是Picasso或Glide,因为图片加载功能可能调用的地方非常多,如果不作一些封装,早期使用了Universal ImageLoader的话,现在需要切换到Glide,那改动量将非常非常大,而且还很有可能会有遗漏,风险度非常高。

那么,有什么解决方案呢?

很简单,我们可以用工厂设计模式进行一些封装,工厂模式有三种:简单工厂模式、抽象工厂模式、工厂方法模式。在这里,我采用工厂方法模式进行封装,具体区别,可以参见:通俗讲讲我对简单工厂、工厂方法、抽象工厂三种设计模式的理解

我们分析一下,ims(IM Service,下文简称ims)应该是有初始化建立连接重连关闭连接释放资源判断长连接是否关闭发送消息等功能,基于上述分析,我们可以进行一个接口抽象: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 OnEventListener是与应用层交互的listener: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 IMConnectStatusCallback是ims连接状态回调监听器: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后写一个Netty tcp实现类: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,写一个工厂方法: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

封装部分到此结束,接下来,就是实现了。


初始化

我们先实现init(Vector serverUrlList, OnEventListener listener, IMSConnectStatusCallback callback)方法,初始化一些参数,以及进行第一次连接等: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中,MsgDispatcher是消息转发器,负责将接收到的消息转发到应用层: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ExecutorServiceFactory是线程池工厂,负责调度重连及心跳线程: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


连接及重连

resetConnect()方法作为连接的起点,首次连接以及重连逻辑,都是在resetConnect()方法进行逻辑处理,我们来瞄一眼:

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Netty一个基于Java的异步事件驱动的网络应用框架,它可以帮助我们快速开发高性能、高可靠性的网络服务器和客户端。而TCP(Transmission Control Protocol)是一种可靠的、面向连接的传输层协议,它提供了可靠的数据传输和流控制。 在使用Netty搭建TCP服务器时,可以按照以下步骤进行操作: 1. 创建Netty服务器: ```java EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new YourServerHandler()); } }) .option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); channelFuture.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } ``` 2. 创建服务器处理器: ```java public class YourServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // 处理接收到的消息 // ... } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { // 处理异常 // ... } } ``` 3. 在服务器处理器中处理接收到的消息和异常。 以上是一个简单的Netty TCP服务器的搭建过程,你可以根据实际需求进行扩展和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值