跟我一起开发商业级IM(2)—— 接口定义及封装

写在前面

在上一篇文章跟我一起开发商业级IM(1)——技术选型及协议定义中,我们完成了技术选型,回顾一下:

通信协议
  • TCP
  • WebSocket
传输协议
  • Protobuf
  • Json
通信框架
  • Netty

接下来,我们基于上述的协议与框架,分别来实现Android客户端Java服务端的接口定义及封装,在这个阶段,只需要定义接口及适当封装即可,暂不需要具体实现。

由于篇幅原因,只能贴出核心部分的代码。在后续的文章中,也是以文字+部分核心代码的方式讲解,如果需要完整代码,请移步Github

贴个Kula高清图镇楼:
Kula

本文只讲述接口的定义及封装,至于实现会在后续的文章中会分篇讲解。

分析一下,我们的IM Service(下文简称IMS)应该有如下接口:

  • 初始化
  • 连接
  • 重连
  • 断开连接
  • 发送消息
  • 释放资源

那我们来开始封装吧。

接口定义

这一步比较简单,先定义一个IMSInterface,在其中编写一些接口方法,然后分别实现NettyTCPIMSNettyWebSocketIMS

/**
 * @author FreddyChen
 * @name IMS抽象接口,不同的客户端协议实现此接口即可
 */
public interface IMSInterface {
}
/**
 * @author FreddyChen
 * @name Netty TCP IM Service,基于Netty实现的TCP协议客户端
 */
public class NettyTCPIMS implements IMSInterface {
    private NettyTCPIMS() { }
    public static NettyTCPIMS getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private static class SingletonHolder {
        private static final NettyTCPIMS INSTANCE = new NettyTCPIMS();
    }
}
/**
 * @author FreddyChen
 * @name Netty WebSocket IM Service,基于Netty实现的WebSocket协议客户端
 */
public class NettyWebSocketIMS implements IMSInterface {
    private NettyWebSocketIMS() { }
    public static NettyWebSocketIMS getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private static class SingletonHolder {
        private static final NettyWebSocketIMS INSTANCE = new NettyWebSocketIMS();
    }
}

如上,接口定义完成,接下来我们来分别定义具体的方法(方法实现在后续文章会讲解)。

初始化

一款优秀的SDK应该具备可配置、易扩展等特性,分析一下,我们不难发现IMS应该需要支持大量的参数配置,比如:

  • 通信协议(TCP/WebSocket)
  • 传输协议(Protobuf/Json)
  • 连接超时时间
  • 重连间隔时间
  • 服务器地址
  • 心跳前后台间隔时间
  • 是否自动重发消息
  • 消息最大重发次数
  • 消息重发间隔时间

等,以上参数都不应该在IMS内部固定,IMS可以提供默认值,同时支持应用层(调用方)去配置。可见支持配置的参数非常多,如果都单独作为参数传递过来,那可读性会非常差,这种情况我们可以利用“Builder模式(构建者模式,也可称为建造者模式)”来优化一下,所以初始化的接口方法可以定义为:

/**
 * 初始化
 *
 * @param context
 * @param options               IMS初始化配置
 * @param connectStatusListener IMS连接状态监听
 * @param msgReceivedListener   IMS消息接收监听
 */
void init(Context context, IMSOptions options, IMSConnectStatusListener connectStatusListener, IMSMsgReceivedListener msgReceivedListener);
/**
 * @author FreddyChen
 * @name IMS初始化配置项
 */
public class IMSOptions {

    private CommunicationProtocol communicationProtocol;// 通信协议
    private TransportProtocol transportProtocol;// 传输协议
    private int co
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值