Giter VIP home page Giter VIP logo

nettyim's Introduction

NettyIM SDK

一款基于Netty高度定制化的长连接SDK,它支持私有协议和Websocket协议的通信。

英文文档

PRs Welcome License

一、功能介绍

  1. 支持自定义私有协议
  2. 支持websocket的ws、wss协议
  3. 内置一套默认私有协议实现
  4. 支持断线重连、连接重试
  5. 地址自动切换
  6. 支持消息重发、消息确认机制
  7. 支持心跳机制
  8. 自定义协议支持握手鉴权
  9. 提供Netty消息处理器注册
  10. 私有协议支持自定义编解码器
  11. 连接状态、消息状态监听
  12. 支持单个消息设置是否需要确认包
  13. 支持各种参数配置

二、典型应用

  1. 应用IM通讯
  2. 嵌入式设备通信

三、引用库

  1. 添加仓库地址
	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}
  1. 添加依赖
dependencies {
	       implementation 'com.github.CWTakiku:NettyIM:latest'
	}

四、使用方式

    //添加网络权限
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
  1. 客户端的配置说明
  • 私有协议的常用配置
    //所以default都可以替换成开发者的实现,只要实现相应接口即可
       imClient=new IMClient.Builder()
                .setCodec(new DefaultCodec()) //默认的编解码,如果是私有协议开发者可以使用自己的protobuf编解码
                .setShakeHands(new DefaultMessageShakeHandsHandler(getDefaultHands())) //设置握手认证,可选
                .setHeartBeatMsg(getDefaultHeart()) //设置心跳需为解码器所支持的对象,可选
                .setAckConsumer(new DefaultAckConsumer()) //设置消息确认包的消费者,这个将影响发送的消息是否发送超时
                .setConnectTimeout(10, TimeUnit.SECONDS) //设置连接超时
                .setResendCount(3)//设置发送失败重试次数
                .setConnectionRetryEnabled(true)//是否连接重试
                .setSendTimeout(6,TimeUnit.SECONDS)//设置发送超时
                .setHeartIntervalBackground(30,TimeUnit.SECONDS)//后台心跳间隔
                .registerMessageHandler(new DefaultMessageReceiveHandler(onMessageArriveListener)) //消息接收处理器
                .registerMessageHandler(new DefaultReplyReceiveHandler(onReplyListener)) //消息状态接收处理器
                .registerMessageHandler(new DefaultHeartbeatRespHandler()) //心跳接收处器
                .setEventListener(new DefaultEventListener("user id1")) //事件监听,可选
                .addAddress(new Address("192.168.69.32",8766,Address.Type.SOCKS))
                .addAddress(new Address("www.baidu.com",8766,Address.Type.SOCKS))
                .setProtocol(IMProtocol.PRIVATE)//协议类型
                .setMaxFrameLength(65535)//最大帧长
                .setMsgTriggerReconnectEnabled(true)//设置是否消息触发重连(默认true)
                .setConnectRetryInterval(500,TimeUnit.MILLISECONDS)//设置连接重试间隔时间
                .setOpenLog(true)   //打开SDK内部日志
                .build();
  • Websocket协议的额外配置项
       IMClient.Builder()
                .addAddress(new Address("ws://192.168.69.32:8804/ws",8804,Address.Type.WS))//websocket地址
                 .addAddress(new Address("wss://test.domain:8804/wss",8804,Address.Type.WS))//wss协议地址
                .addWsHeader("user","userId1") //ws头
                .setProtocol(IMProtocol.WEB_SOCKET);//设置为webscoket协议
  1. 建立连接
imClient.startConnect();//建立连接
  1. 断开连接
imClient.disConnect();//主动断开连接,不会自动重连
  1. 发送消息
  Request request=new Request.Builder(). //创建一个消息发送request           
              setNeedACK(true).//需要ACK
              setSendRetry(true). //能发送重试
              setBody(getMsgPack(appMessage.buildProto())). //body为解码所支持的对象
              build();
 imClient.newCall(request).enqueue(callback);//发送消息,消息在子线程回调
Disposable disposable=   imClient.newCall(request).enqueue(callback).subscribe(consumer); //发送消息,会订阅特定的消息处理
  1. 其他一些API
 imClient.setBackground(background);//设置前后台切换,将会自动切换不同的心跳间隔
 imClient.isConnected();//判断是否连接中
 ...

五、项目结构设计图

image

六、Demo使用

APP模块test下含有内置自定义协议和webscoket两种协议的后台代码,开启服务端,再到对应协议的客户端上修改服务端IP,运行客户端

七、项目博客地址

简书 CSDN 掘金

如果使用过程遇到什么问题或者疑问欢迎提交issue,也欢迎star! 联系方式QQ916379012

Android IM反馈交流群 QQ群:1051018406

image

nettyim's People

Contributors

cwtakiku avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.