# aim
**Repository Path**: clbDream/aim
## Basic Information
- **Project Name**: aim
- **Description**: aim是一套基于Netty框架开发的一套网络通信、消息推送快速开发框架,可应用于信令推送,即时聊天,移动设备指令推送等领域。开发者可沉浸于业务开发,不用关心消息通道链接,消息编解码协议等繁杂处理。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 4
- **Created**: 2023-03-14
- **Last Updated**: 2025-01-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## 在线文档
## [https://www.yuque.com/alum/agigf8/gezg25](https://www.yuque.com/alum/agigf8/gezg25)
---
## 项目介绍
AIM是一套完全基于Netty的消息推送框架,可应用于信令推送,即时聊天,移动设备指令推送等领域。开发者可沉浸于业务开发,不用关心消息通道链接,消息编解码协议等繁杂处理。
AIM采用业内主流开源技术构建,易于扩展和使用,并完美支持集群部署支持海量链接,目前支持websocket,android,ios,桌面应用,系统应用等多端接入持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用即时消服务。
用时7年 基于AIM的项目已经运行在全国各个地方,包括上司公司,各地政务系统,警务系统等服务于上百家客户,希望AIM也能为您带来价值,如果您也希望加入项目成为贡献者,请联系我。
#### 1.支持TCP、WebSocket统一端口接入管理
#### 2.TEXT、JSON、ProtoBuf、TLV、Binary等数据拆解包协议
#### 3.开源项目中惟一具备完善群组项目的良心组件
#### 4.支持Redis、RabbitMq集群
#### 5.支持Nacos等注册配置中心
---
## 项目位置
Gitee: https://gitee.com/alum/aim
Github: https://github.com/AlumXi/aim
---
## 演示项目
VUE(Web)项目: https://gitee.com/alum/aim-vue
APP(Net7)项目: https://gitee.com/alum/aim-chat
---
## 联系作者
邮箱: alum@live.cn 微信:alum-xi
QQ:349545750
---
## 使用说明
### 1.Maven引入:aim-cluster、aim-starter或者alum-all对应的jar,如下:
xin.alum
aim-all
${last_version}
### 2.代码集成:
`AIM.start();` //可参阅aim-server中的AimStarter类
注:AimReceiver可以被重写,完成自定义业务处理,可参考[AimReciveService.java](aim-example%2Faim-server%2Fsrc%2Fmain%2Fjava%2Fxin%2Falum%2Faim%2FAimReciveService.java)
### 3.通信数据与握手协议
>、默认收发消息是基于ProtoBuf的Sent、Reply对象
>、若自定义数据包可通过重载AimReceiver的onText和onByte来实现自定义数据接受及业务处理
>、通信数据解封包:目前AIM支持Text、Json、ProtoBuf、Tlv、Binary五种通信数据类型,默认为配置项:Aim.agreement
>、WebSocket连接可通过URL握手时的agreement参数由客户端指定其通道数据类型协议
>、TCP连接可通过连接后直发0-4字数(测试用,不推荐)确定,也可以通过Packet.Login(推荐)对接来实现握手
>、握手业务认证处理由AimReceiver的onHand**方法来接受处理,认证失败AIM会自动断开其连接
### 4.集群配置
>、默认为非集群模式
>、开启集群方式为在yml配置文件中设置 aim.cluster.mode为redis或rabbitmq,默认为none;
>、集群模式启动aim-server前需要先准备好Redis或Rabbit,并在对应Server中配置,spring的Redis和Rabbitmq配置,可参阅aim-server中的配置
>、集群订阅消息处理:集群消息订阅可实现xin.alum.aim.groups.ClusterMessage 接口的onMessage来实现并通过Aim.Start([ClusterMessage])进行传递,可参阅aim-server中的ClusterMessage及AimStarter类
### 5.源码部署测试
aim-server和aim-nacos可以作为服务端直接启动,aim-nacos需要nacos-server启动,若无nacos可直接启动aim-server
操作步骤如下:
(1).clone AIM项目源码到本地,通过Idea打开aim项目源码
(2).启动aim-server项目
(3).通过Jmeter等测试工具连接aim-server的Tcp/WebSocket的端口8090(默认)
(4).WebSocket接入地址:ws://127.0.0.1:8090/ws?token={不为空即可}&agreement=Json
(5).Socket接入地址:tcp://127.0.0.1:8090 (TCP可以直连发1-5数字进行握手,1-5为协议编号等同于4中agreement参数,可参阅源码Packet.proto文件中的Agreement对象)
参数说明:token为用户对象,身份参数,agreement为通信协议能数,默认为json
---
### 6. aim-example 实例项目
JAVA: 此项目是基于Java语言实现的服务端(Server)与客户端(Client)控制台演示实例,对应数据协议均有实现
JS/TS:请参阅[aim-vue](https://gitee.com/alum/aim-vue)项目
C#/App: 请参阅[aim-chat](https://gitee.com/alum/aim-chat)项目
---
[更新日志](upgrade.md ':include')