Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

juggleim/im-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

511 Commits

Repository files navigation

JuggleIM

一个高性能,可扩展的开源 IM 即时通讯系统。

社群讨论

如果对 IM 感兴趣、有集成问题讨论的朋友,非常欢迎加入社群讨论〜

Telegram 中文群Telegram English添加好友加入微信群

备注:由于微信群二维码有时间限制,加入微信讨论可优先加 小山 微信好友,由 Ta 邀请进群组

特性

  • 灵活的部署模式,支持公有云,私有云,托管云等部署形态。
  • Protobuf+Websocket 实现长连接,低流量,高性能,且在网络不佳的环境下具备较好的连通性。
  • 性能强大,专业版支持集群部署,无限横向扩展,能支撑亿级日活应用。
  • 协议及数据全链路加密,无数据泄露风险。
  • 提供方便的运维工具和管理后台,简单好维护。
  • 支持Android,iOS,Web,PC 等多平台 SDK,提供快捷集成的Demo和文档。
  • 支持多端同时在线和消息多端同步,确保状态多端一致。
  • 支持全球链路加速,可服务全球级应用。
  • 提供丰富的API和WebHook,可方便的与现有系统集成。
  • 支持万人,十万人大群,轻松沟通,不丢消息。
  • 支持无上限直播聊天室。
  • 具备 AI 机器人对接能力,可轻松对接大模型。

JuggleIM 项目说明

对接文档:https://juggle.im/docs/client/import

仓库地址 说明
im-server 底层 IM 核心服务,负责消息分发,存储等IM相关业务
jugglechat-server Demo的业务服务,负责处理用户注册/登录,创建群组,添加好友等业务,可以在这个基础上二开自己特色的业务能力
jugglechat-server-java Demo 业务服务的 Java 版本
imserver-console IM 服务的管理后台,用于操作IM相关配置,监控IM业务量
imsdk-android 安卓端 imsdk,内含一个 UI Demo,可用于二开
imsdk-ios iOS 端 imsdk,内含一个 UI Demo,可用于二开
imsdk-web web 端 imsdk
imsdk-pc 桌面端 imsdk,暂未开源,可联系客服了解
imsdk-flutter imsdk 的 flutter 版本
imsdk-harmony 鸿蒙版本 imsdk,内含一个 UI Demo,可用于二开
jugglechat-web 集成 imsdk-web 的 web 版 Demo,可用于二开
jugglechat-desktop 集成 imsdk-pc 的桌面版 Demo,可用于二开
jugglelive-web 集成 imsdk-web 的一个聊天室场景Demo,可用于二开

其他:

仓库地址 说明
bot-connector 机器人对接服务,用于打通 im-server 和 三方机器人
imserver-sdk-go 封装 im-server 服务端 API 的 SDK,供业务方集成到自己业务系统中
imserver-sdk-java imserver-sdk 的 java 版本

快速部署体验

部署文档(https://www.juggle.im/docs/guide/deploy/quickdeploy/)

手动部署

1. 安装并初始化 MySQL

1) 安装 MySQL

2) 创建DB实例

CREATE SCHEMA `jim_db` ;

3) 初始化表结构

初始化表结构的sql文件在 im-server/docs/jim.sql , 导入命令如下:

mysql -u{db_user} -p{db_password} jim_db < jim.sql

2. 安装MongoDB(可选)

3. 启动im-server

1) 运行目录

运行目录为 im-server/launcher,其中 conf 目录下存放的是配置文件,logs目录下是服务的运行日志目录。

2) 编辑配置文件

配置文件位置:im-server/launcher/conf/config.yml

defaultPort: 9003 # im-server 默认监听端口
nodeName: testNode # im-server 的节点名称
nodeHost: 127.0.0.1 # im-server 的节点IP
msgStoreEngine: mysql # 配置用什么存储来存消息数据,有两种存储引擎可选。mysql:使用mysql存储消息数据(默认);mongo:使用MongoDB存储消息数据
log:
 logPath: ./logs # 运行日志所在目录
 logName: jim-info # 运行日志的前缀名
 visual: false # 是否开启可视化日志。开启后,会同步将日志数据写入一个 KV 数据库,在管理后台"开发工具->连接排查"处,可界面化查询日志;
mysql: # im-server 所用的MySQL相关配置
 user: root
 password: 123456
 address: 127.0.0.1:3306
 name: im_db
# mongodb: # im-server 所用的MongoDB相关配置,用于存储消息数据。该配置为可选,在 msgStoreEngine 配置为 "mongo" 时生效;
# address: 127.0.0.1:27017
# name: jim_msgs # mongodb 表空间名称,im-server启动后,会自动在这个空间下初始化collection;
# apiGateway: # im-server 的服务端 API 端口, 供业务APP的服务端调用;非必填项,默认复用 defaultPort 作为默认端口
# httpPort: 9001
# connectManager: # im-server 长连接端口;非必填项,默认复用 defaultPort 作为默认端口
# wsPort: 9003
adminGateway: # im-server 自带的管理后台地址,默认账号密码是:admin/123456
 httpPort: 8090

3) 启动im-server

在 im-server/launcher 目录下,执行如下命令:

go run main.go

4) 配置外网访问地址(域名/IP)

需要配置外网地址的端口列表:

端口 协议类型 说明
9003 http 服务端 API 服务监听端口,用于业务服务器,例如 jugglechat-server 配置文件中需要配置这个地址;
9003 websocket IM 长连接监听端口,用于客户端SDK与IM 服务建立长连接(websocket)
8090 http IM 服务的管理后台监听端口,默认账号和密码:admin/123456

配置外网地址的方法,这里不详细描述,大家可以根据自身环境来灵活配置(常用方式: 挂公网ip,nginx反向代理,负载均衡等).

注: 如果仅内网调试使用,可以不配置外网IP/域名,仅使用内网IP即可

5) 将长连接地址配置到IM系统中

配置方式很简单,在数据库中插入一条配置数据即可:

insert into globalconfs (conf_key, conf_value)values('connect_address', '{"default":["127.0.0.1:9002"]}')

其中,将 127.0.0.1 替换成该机器的内网IP,或对外的公网IP/域名,这个是客户端SDK的长连接地址,将有导航服务(8081)下发给客户端SDK;

4. 创建应用(租户)

JuggleIM 本身是一套多租户的系统,可以在一套服务中创建多个appkey(租户),租户之间的数据相互隔离,互不影响。

方式一:登录管理后台,创建租户

待完善

方式二:通过管理API,创建租户

其中,app_key 用于指定租户的标识,可自定义,要求在系统内唯一;app_name为租户的名称,可自定义; 注:这里用的是IM服务管理后台(8090)的地址,127.0.0.1 替换成im服务的内网IP,或公网IP/域名。

curl --request POST \
 --url http://127.0.0.1:8090/admingateway/apps/create \
 --data '{
 "app_key":"appkey",
 "app_name":"appname"
}'

响应数据示例:

{
	"code": 0,
	"msg": "success",
	"data": {
		"app_name": "appname",
		"app_key": "appkey",
		"app_secret": "hciKcc6sXRDjYUQp"
	}
}

5. 登入管理后台

管理后台地址:http://127.0.0.1:8090 默认账号/密码: admin/123456

登入管理后台后,即可看到创建的应用列表,点击其中一个应用,可以对其配置进行修改和维护。

6. 业务服务器/客户端集成

这里汇总下业务集成所需的各项配置:

  1. 业务服务器集成
配置项 示例 备注
IM 服务端 API 地址 http://127.0.0.1:9003 供业务服务器访问IM服务的API接口地址,使用该接口可以注册IM用户,创建群,发送系统消息等,接口文档参考:https://www.juggle.im/docs/server/api/
app_key appkey1 应用的租户标识,在第4步中创建,可自定义,但要保证在系统内唯一
app_secret hciKcc6sXRDjYUQp 应用对应的鉴权秘钥,创建应用时自动生成。如果想自定义的话,确保配置为16位的字符串。注意:确保该秘钥仅在业务服务器端使用,不要泄露到客户端。
  1. 客户端SDK集成
配置项 示例 备注
IM 服务的连接地址 ws://127.0.0.1:9003 IM 的连接地址,客户端SDK初始化时需要传入,参考文档:https://www.juggle.im/docs/client/quickstart/android/
app_key appkey1 应用的租户标识,确保与业务服务器端配置的保持一致。

AltStyle によって変換されたページ (->オリジナル) /