docs: update

This commit is contained in:
tangtaoit 2024-07-19 14:38:31 +08:00
parent a5dda0b9df
commit eb5a8f9cd4
34 changed files with 428 additions and 312 deletions

View File

@ -7,7 +7,7 @@ import { navbar } from "./navbar";
import { sidebar } from "./sidebar"; import { sidebar } from "./sidebar";
export default defineConfig({ export default defineConfig({
title: "悟空IM", title: "WuKongIM",
description: "IM", description: "IM",
lang: "zh-CN", lang: "zh-CN",
head: [ head: [
@ -28,7 +28,7 @@ export default defineConfig({
srcDir: "./src", srcDir: "./src",
themeConfig: { themeConfig: {
logo: "/logo.png", logo: "/logo.png",
siteTitle: "悟空IM", siteTitle: "WuKongIM",
nav: navbar, nav: navbar,
sidebar: sidebar, sidebar: sidebar,
lastUpdatedText: "上次更新", lastUpdatedText: "上次更新",

View File

@ -7,7 +7,7 @@ export const sidebar: DefaultTheme.Sidebar = {
collapsed: false, collapsed: false,
items: [ items: [
{ text: "文档阅读引导", link: "/guide/guide" }, { text: "文档阅读引导", link: "/guide/guide" },
{ text: "什么是悟空 IM", link: "/guide/" }, { text: "什么是WuKongIM", link: "/guide/" },
{ text: "基础概念", link: "/guide/initialize" }, { text: "基础概念", link: "/guide/initialize" },
{ text: "适用场景", link: "/guide/scene" }, { text: "适用场景", link: "/guide/scene" },
], ],
@ -15,8 +15,8 @@ export const sidebar: DefaultTheme.Sidebar = {
], ],
"/install/": [ "/install/": [
{ {
text: "Dokcer Compose", text: "Dokcer Compose(推荐)",
collapsed: true, collapsed: false,
items: [ items: [
{ {
text: "部署", text: "部署",
@ -123,7 +123,7 @@ export const sidebar: DefaultTheme.Sidebar = {
items: [ items: [
{ text: "离线消息说明", link: "/server/advance/offlinemsg" }, { text: "离线消息说明", link: "/server/advance/offlinemsg" },
{ text: "集成到自己系统", link: "/server/advance/integration" }, { text: "集成到自己系统", link: "/server/advance/integration" },
{ text: "悟空 IM 协议", link: "/server/advance/proto" }, { text: "WuKongIM 协议", link: "/server/advance/proto" },
], ],
}, },
], ],

View File

@ -1,4 +1,4 @@
# 悟空IM # WuKongIM
## 本地开发 ## 本地开发

View File

@ -3,7 +3,9 @@
"version": "1.0.0", "version": "1.0.0",
"description": "wukongim文档", "description": "wukongim文档",
"keywords": [ "keywords": [
"悟空IM", "WuKongIM",
"WuKong",
"WuKongIM",
"IM" "IM"
], ],
"type": "module", "type": "module",

View File

@ -14,15 +14,15 @@
## 访问 安装WuKongIM ## 访问 安装WuKongIM
1. 访问悟空IM监控系统 1. 访问WuKongIM监控系统
![悟空IM监控系统](./1panle2.png) ![WuKongIM监控系统](./1panle2.png)
2. 访问悟空IM Demo 2. 访问WuKongIM Demo
![悟空IM Demo](./1panle3.jpg) ![WuKongIM Demo](./1panle3.jpg)
![悟空IM Demo](./1panle4.jpg) ![WuKongIM Demo](./1panle4.jpg)
![悟空IM Demo](./1panle5.jpg) ![WuKongIM Demo](./1panle5.jpg)

View File

@ -14,8 +14,8 @@ curl -sSL https://gitee.com/WuKongDev/WuKongIMCli/raw/main/install.sh | sudo bas
wk context add demo --server http://127.0.0.1:5001 --token xxxx --description "WuKongIM Demo" wk context add demo --server http://127.0.0.1:5001 --token xxxx --description "WuKongIM Demo"
``` ```
--server: 为部署的`悟空IM`服务器地址,默认端口 5001 --server: 为部署的`WuKongIM`服务器地址,默认端口 5001
--token: 为`悟空IM`服务器的 token默认为空 --token: 为`WuKongIM`服务器的 token默认为空
## run 命令 ## run 命令
@ -51,7 +51,7 @@ wk doctor
## upgrade 命令 ## upgrade 命令
升级`悟空IM`端(在部署了服务器的机器上运行才有效) 升级`WuKongIM`端(在部署了服务器的机器上运行才有效)
```shell ```shell
wk upgrade wk upgrade

View File

@ -22,12 +22,12 @@ title: 介绍
| 项目名 | Github地址 | Example | 文档 | 说明 | | 项目名 | Github地址 | Example | 文档 | 说明 |
| ---- | ---------- | --------- | ---- | ---- | | ---- | ---------- | --------- | ---- | ---- |
| WuKongIMAndroidSDK | [Github](https://github.com/WuKongIM/WuKongIMAndroidSDK) | [Example](https://github.com/WuKongIM/WuKongIMAndroidSDK/tree/master/app) | [文档](https://githubim.com/sdk/android.html) | 悟空IM的Android SDK | | WuKongIMAndroidSDK | [Github](https://github.com/WuKongIM/WuKongIMAndroidSDK) | [Example](https://github.com/WuKongIM/WuKongIMAndroidSDK/tree/master/app) | [文档](https://githubim.com/sdk/android.html) | WuKongIM的Android SDK |
| WuKongIMiOSSDK | [Github](https://github.com/WuKongIM/WuKongIMiOSSDK) | [Example](https://github.com/WuKongIM/WuKongIMiOSSDK/tree/main/Example) | [文档](https://githubim.com/sdk/ios.html) | 悟空IM的iOS SDK | | WuKongIMiOSSDK | [Github](https://github.com/WuKongIM/WuKongIMiOSSDK) | [Example](https://github.com/WuKongIM/WuKongIMiOSSDK/tree/main/Example) | [文档](https://githubim.com/sdk/ios.html) | WuKongIM的iOS SDK |
| WuKongIMUniappSDK | [Github](https://github.com/WuKongIM/WuKongIMUniappSDK) | [Example](https://github.com/WuKongIM/WuKongIMUniappSDK/tree/main/examples) | [文档](https://githubim.com/sdk/uniapp.html) | 悟空IM的 Uniapp SDK | | WuKongIMUniappSDK | [Github](https://github.com/WuKongIM/WuKongIMUniappSDK) | [Example](https://github.com/WuKongIM/WuKongIMUniappSDK/tree/main/examples) | [文档](https://githubim.com/sdk/uniapp.html) | WuKongIM的 Uniapp SDK |
| WuKongIMJSSDK | [Github](https://github.com/WuKongIM/WuKongIMJSSDK) | [Example](https://github.com/WuKongIM/WuKongIMJSSDK/tree/main/examples) | [文档](https://githubim.com/sdk/javascript.html) | 悟空IM的 JS SDK | | WuKongIMJSSDK | [Github](https://github.com/WuKongIM/WuKongIMJSSDK) | [Example](https://github.com/WuKongIM/WuKongIMJSSDK/tree/main/examples) | [文档](https://githubim.com/sdk/javascript.html) | WuKongIM的 JS SDK |
| WuKongIMFlutterSDK | [Github](https://github.com/WuKongIM/WuKongIMFlutterSDK) | [Example](https://github.com/WuKongIM/WuKongIMFlutterSDK/tree/master/example) |[文档](https://githubim.com/sdk/flutter.html) | 悟空IM的 Flutter SDK | | WuKongIMFlutterSDK | [Github](https://github.com/WuKongIM/WuKongIMFlutterSDK) | [Example](https://github.com/WuKongIM/WuKongIMFlutterSDK/tree/master/example) |[文档](https://githubim.com/sdk/flutter.html) | WuKongIM的 Flutter SDK |
| WuKongIMReactNativeDemo | [Github](https://github.com/wengqianshan/WuKongIMReactNative) | 无 | 无 | 悟空IM的 React Native Demo(由贡献者 [wengqianshan](https://github.com/wengqianshan) 提供) | | WuKongIMReactNativeDemo | [Github](https://github.com/wengqianshan/WuKongIMReactNative) | 无 | 无 | WuKongIM的 React Native Demo(由贡献者 [wengqianshan](https://github.com/wengqianshan) 提供) |
有需要加微信群交流: 有需要加微信群交流:

View File

@ -1,4 +1,4 @@
# 什么是悟空 IM # 什么是WuKongIM
高性能通用分布式通讯服务支持聊天应用消息推送物联网通讯音视频信令直播弹幕客服系统AI 通讯,即时社区等场景。 高性能通用分布式通讯服务支持聊天应用消息推送物联网通讯音视频信令直播弹幕客服系统AI 通讯,即时社区等场景。
@ -6,7 +6,7 @@
## 特性 ## 特性
悟空 IM 具备以下特性: `WuKongIM` 具备以下特性:
<!-- - 0⃣ **零依赖**:没有依赖任何第三方中间件,部署简单,一条命令即可启动 <!-- - 0⃣ **零依赖**:没有依赖任何第三方中间件,部署简单,一条命令即可启动
- 📚 **自研可控**基于pebble kv数据库消息数据库消息分区永久存储自研二进制协议支持自定义协议 - 📚 **自研可控**基于pebble kv数据库消息数据库消息分区永久存储自研二进制协议支持自定义协议
@ -32,13 +32,13 @@
🚀 **性能** 🚀 **性能**
基于pebble kv数据库研发了针对于IM这种服务的特有分布式数据库省了其他数据库为了通用性而带来的性能损耗。 基于pebble kv数据库研发了针对于IM这种服务的特有分布式数据库省了其他数据库为了通用性而带来的性能损耗 因为存储快,所以消息快
🔥**高可用** 🔥**高可用**
通过魔改raft分布式协议实现了自动容灾一台机器宕机另一台机器自动接管对外无感知。 通过魔改raft分布式协议实现了自动容灾一台机器宕机另一台机器自动接管对外无感知。
去中心化,无单点,无中心节点,每个节点都是独立的,都可以提供服务。 去中心化,无单点,无中心节点,每个节点都是独立且平等的,都可以提供服务。
扩容方便,只需增加机器,不需要停机,不需要迁移数据,自动按策略分配数据。 扩容方便,只需增加机器,不需要停机,不需要迁移数据,自动按策略分配数据。

View File

@ -18,13 +18,13 @@
### 用户 ### 用户
由第三方系统注册到***悟空IM***系统内的uid称为用户。 由第三方系统注册到***WuKongIM***系统内的uid称为用户。
用户有 uid 和 token 两个重要字段uid 是用户的唯一标识token 是用户的身份凭证,进行长连接到**悟空 IM**服务时,需要携带 token 进行身份验证。 用户有 uid 和 token 两个重要字段uid 是用户的唯一标识token 是用户的身份凭证,进行长连接到**WuKongIM**服务时,需要携带 token 进行身份验证。
### 设备 ### 设备
连接到**悟空IM**服务的客户端称为设备。 连接到**WuKongIM**服务的客户端称为设备。
一个用户可以有多个设备。 一个用户可以有多个设备。

View File

@ -29,7 +29,7 @@
- 大群频道支持 - 大群频道支持
<!-- 把联机的用户建立一个频道内当A打了敌人后A将数据告诉你们自己的业务服务器业务服务器处理后调用悟空IM的发送消息接口发送消息的频道参数指定为这个建立的频道这样这个频道内所有人都能收到包括A --> <!-- 把联机的用户建立一个频道内当A打了敌人后A将数据告诉你们自己的业务服务器业务服务器处理后调用WuKongIM的发送消息接口发送消息的频道参数指定为这个建立的频道这样这个频道内所有人都能收到包括A -->
## 音视频信令服务器 ## 音视频信令服务器

View File

@ -1,13 +1,13 @@
--- ---
layout: home layout: home
title: 悟空IM title: WuKongIM
titleTemplate: 悟空IM titleTemplate: WuKongIM
hero: hero:
name: 悟空IM name: WuKongIM
text: 让信息传递更简单 text: 让信息传递更简单
tagline: 悟空IM是高性能通用即时通讯服务支持聊天应用消息推送物联网通讯音视频信令直播弹幕客服系统AI 通讯,即时社区等场景。 tagline: WuKongIM是高性能通用即时通讯服务支持聊天应用消息推送物联网通讯音视频信令直播弹幕客服系统AI 通讯,即时社区等场景。
image: image:
src: /logo_white.png src: /logo_white.png
alt: logo alt: logo

View File

@ -9,7 +9,7 @@
| 名称 | 内网IP | 外网IP | | 名称 | 内网IP | 外网IP |
| --- | --- | --- | | --- | --- | --- |
| node4(1004) | 192.168.12.4 | 222.222.222.4 | | node4(1004) | 10.206.0.6 | 146.56.232.98 |
## 在node4上部署`WuKongIM` ## 在node4上部署`WuKongIM`
@ -19,35 +19,31 @@
创建目录 创建目录
```bash ```bash
mkdir ~/wukongim mkdir ~/wukongim
``` ```
进入目录 进入目录
```bash ```bash
cd ~/wukongim cd ~/wukongim
``` ```
#### 2. 在安装目录创建`docker-compose.yml`文件 #### 2. 在安装目录创建`docker-compose.yml`文件
```yaml ```yaml
version: '3.7' version: '3.7'
services: services:
wukongim: # WuKongIM服务 wukongim: # WuKongIM服务
image: wukongim/wukongim:v2.0.1-beta-20240715 image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v2.0.1-beta-20240715
environment: environment:
- "WK_CLUSTER_NODEID=1004" - "WK_CLUSTER_NODEID=1004"
- "WK_CLUSTER_APIURL=http://192.168.12.4:5001" # 节点内部通信api url地址这里ip换成自己节点实际node2的内网ip - "WK_CLUSTER_APIURL=http://10.206.0.6:5001" # 节点内部通信api url地址这里ip换成自己节点实际node2的内网ip
- "WK_CLUSTER_SERVERADDR=192.168.12.4:11110" # 节点内部通信请求地址 - "WK_CLUSTER_SERVERADDR=10.206.0.6:11110" # 节点内部通信请求地址
- "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址 - "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址
- "WK_EXTERNAL_TCPADDR=119.45.229.172:15100" # app端访问的tcp长连接地址 - "WK_EXTERNAL_TCPADDR=119.45.229.172:15100" # app端访问的tcp长连接地址
- "WK_TRACE_PROMETHEUSAPIURL=http://10.206.0.13:9090" # 监控地址 - "WK_TRACE_PROMETHEUSAPIURL=http://10.206.0.13:9090" # 监控地址
- "WK_CLUSTER_SEED=1001@192.168.12.1:1110" # 种子节点, 原集群里容易节点都可以做为种子节点这里将node1节点作为种子节点 - "WK_CLUSTER_SEED=1001@10.206.0.13:11110" # 种子节点, 原集群里容易节点都可以做为种子节点这里将node1节点作为种子节点
healthcheck: healthcheck:
test: "wget -q -Y off -O /dev/null http://localhost:5001/health > /dev/null 2>&1" test: "wget -q -Y off -O /dev/null http://localhost:5001/health > /dev/null 2>&1"
interval: 10s interval: 10s
@ -62,6 +58,7 @@ services:
- 5100:5100 # tcp端口 - 5100:5100 # tcp端口
- 5200:5200 # websocket端口 - 5200:5200 # websocket端口
- 5300:5300 # 管理端端口 - 5300:5300 # 管理端端口
- 5172:5172 # demo端口
``` ```
@ -74,7 +71,7 @@ scrape_configs:
... ...
- job_name: 'wukongim4-trace-metrics' - job_name: 'wukongim4-trace-metrics'
static_configs: static_configs:
- targets: ['192.168.12.4:5300'] - targets: ['10.206.0.6:5300']
labels: labels:
id: "1003" id: "1003"
@ -89,53 +86,60 @@ scrape_configs:
upstream wukongimapi { upstream wukongimapi {
... ...
server 192.168.12.4:5001; server 10.206.0.6:5001;
} }
upstream wukongimdemo { upstream wukongimdemo {
... ...
server 192.168.12.4:5172; server 10.206.0.6:5172;
} }
upstream wukongimanager { upstream wukongimanager {
... ...
server 192.168.12.4:5300; server 10.206.0.6:5300;
} }
upstream wukongimws { upstream wukongimws {
... ...
server 192.168.12.4:5200; server 10.206.0.6:5200;
}
stream {
...
upstream wukongimtcp {
...
server 10.206.0.6:5100;
}
...
} }
upstream wukongimtcp {
...
server 192.168.12.4:5100;
}
``` ```
#### 5. 启动node4 #### 5. 重启node1
在node4进入安装目录`~/wukongim`)里执行如下命令:
```bash
docker-compose up -d
```
#### 重启node1
在node1进入安装目录`~/wukongim`)里执行如下命令: 在node1进入安装目录`~/wukongim`)里执行如下命令:
```bash ```bash
docker-compose restart sudo docker-compose restart
``` ```
#### 6. 启动node4
`node4`进入安装目录(`~/wukongim`)里执行如下命令:
```bash
sudo docker-compose up -d
```
## 验证 ## 验证
登录后台管理系统,在节点管理中可以看到新加入的节点的状态是否是已加入状态,如果是则说明扩容成功。 登录后台管理系统,在节点管理中可以看到新加入的节点的状态是否是已加入状态,如果是则说明扩容成功。

View File

@ -53,7 +53,7 @@ services:
environment: environment:
- "WK_MODE=release" # release模式 - "WK_MODE=release" # release模式
- "WK_CLUSTER_NODEID=1001" - "WK_CLUSTER_NODEID=1001"
- "WK_EXTERNAL_IP=119.45.229.172" # 当前节点外网ip - "WK_EXTERNAL_IP=119.45.229.172" # 当前节点外网ip
- "WK_CLUSTER_APIURL=http://10.206.0.13:5001" # 节点内部通信api url地址这里ip换成自己节点实际node2的内网ip - "WK_CLUSTER_APIURL=http://10.206.0.13:5001" # 节点内部通信api url地址这里ip换成自己节点实际node2的内网ip
- "WK_CLUSTER_SERVERADDR=10.206.0.13:11110" # 节点内部通信请求地址 - "WK_CLUSTER_SERVERADDR=10.206.0.13:11110" # 节点内部通信请求地址
- "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址 - "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址
@ -332,7 +332,7 @@ stream {
在所有节点下执行如下命令 在所有节点下执行如下命令
```bash ```bash
docker-compose up -d sudo docker-compose up -d
``` ```

View File

@ -270,7 +270,7 @@ scrape_configs:
```bash ```bash
docker-compose up -d sudo docker-compose up -d
``` ```
@ -278,7 +278,7 @@ docker-compose up -d
```bash ```bash
docker-compose stop sudo docker-compose stop
``` ```

View File

@ -18,18 +18,18 @@ version: '3.7'
services: services:
... ...
wukongim: # WuKongIM服务 wukongim: # WuKongIM服务
image: wukongim/wukongim:2.x.x # 新版本号 image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:2.x.x # 新版本号
``` ```
使用如下命令获取最新镜像 使用如下命令获取最新镜像
```bash ```bash
docker-compose pull wukongim sudo docker-compose pull wukongim
``` ```
重启 重启
```bash ```bash
docker-compose up -d sudo docker-compose up -d
``` ```

View File

@ -29,4 +29,21 @@ scrape_configs:
... ...
``` ```
`xx.xx.xx.xx` 替换为`WuKongIM``内网ip`地址
`xxxx` 替换为`WuKongIM``nodeId`
## 配置`WuKongIM`
在各节点的`wk.yaml`文件中配置`prometheus`的地址
```yaml
trace:
prometheusApiUrl: "http://xx.xx.xx.xx:9090"
```
`xx.xx.xx.xx`替换为`prometheus``内网ip`地址

View File

@ -84,9 +84,15 @@ upstream wukongimws {
... ...
server 192.168.12.4:5200; server 192.168.12.4:5200;
} }
upstream wukongimtcp {
... stream {
server 192.168.12.4:5100; ...
upstream wukongimtcp {
...
server 192.168.12.4:5100;
}
...
} }
``` ```

View File

@ -22,9 +22,9 @@ WuKongIM集群符合 `2n+1` 原则n表示宕机数量比如允许1台机
| 名称 | 内网IP | 外网IP | 角色 | | 名称 | 内网IP | 外网IP | 角色 |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| node1(1001) | 192.168.12.1 | 222.222.222.1 | 核心节点 | | node1(1001) | 10.206.0.13 | 119.45.229.172 | 核心节点 |
| node2(1002) | 192.168.12.2 | 222.222.222.2 | 常规 | | node2(1002) | 10.206.0.14 | 129.211.213.76 | 常规 |
| node3(1003) | 192.168.12.3 | 222.222.222.3 | 常规 | | node3(1003) | 10.206.0.8 | 1.13.191.138 | 常规 |
## 准备工作 ## 准备工作
@ -61,155 +61,190 @@ chmod +x wukongim
#### 配置`WuKongIM` #### 配置`WuKongIM`
在node1上创建配置文件`wk.yaml` 内容如下: `node1`上创建配置文件`wk.yaml` 内容如下:
```yaml ```yaml
mode: "release" mode: "release"
external: # 公网配置 external: # 公网配置
ip: "222.222.222.1" # 节点外网IP客户端能够访问到的IP地址。 ip: "119.45.229.172" # 节点外网IP客户端能够访问到的IP地址。
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的 tcpAddr: "119.45.229.172:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的 wsAddr: "ws://119.45.229.172:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的
cluster: cluster:
nodeId: 1001 # 节点id nodeId: 1001 # 节点id
apiUrl: "http://192.168.12.1:5001" # 当前节点内网的api地址 apiUrl: "http://10.206.0.13:5001" # 当前节点内网的api地址
serverAddr: "192.168.12.1:11110" # 当前节点内网的分布式通讯地址 serverAddr: "10.206.0.13:11110" # 当前节点内网的分布式通讯地址
nodes: initNodes:
- "1001@192.168.12.1:11100" - "1001@10.206.0.13:11110"
- "1002@192.168.12.2:11100" - "1002@10.206.0.14:11110"
- "1003@192.168.12.3:11100" - "1003@10.206.0.8:11110"
``` ```
在node2上创建配置文件`wk.yaml` 内容如下: `node2`上创建配置文件`wk.yaml` 内容如下:
```yaml ```yaml
mode: "release" mode: "release"
external: # 公网配置 external: # 公网配置
ip: "222.222.222.2" # 节点外网IP客户端能够访问到的IP地址。 ip: "129.211.213.76" # 节点外网IP客户端能够访问到的IP地址。
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的 tcpAddr: "119.45.229.172:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的 wsAddr: "ws://119.45.229.172:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的
cluster: cluster:
nodeId: 1002 # 节点id nodeId: 1002 # 节点id
apiUrl: "http://192.168.12.2:5001" # 当前节点内网的api地址 apiUrl: "http://10.206.0.14:5001" # 当前节点内网的api地址
serverAddr: "192.168.12.2:11110" # 当前节点内网的分布式通讯地址 serverAddr: "10.206.0.14:11110" # 当前节点内网的分布式通讯地址
nodes: initNodes:
- "1001@192.168.12.1:11100" - "1001@10.206.0.13:11110"
- "1002@192.168.12.2:11100" - "1002@10.206.0.14:11110"
- "1003@192.168.12.3:11100" - "1003@10.206.0.8:11110"
``` ```
在node3上创建配置文件`wk.yaml` 内容如下: `node3`上创建配置文件`wk.yaml` 内容如下:
```yaml ```yaml
mode: "release" mode: "release"
external: # 公网配置 external: # 公网配置
ip: "222.222.222.3" # 节点外网IP客户端能够访问到的IP地址。 ip: "1.13.191.138" # 节点外网IP客户端能够访问到的IP地址。
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的 tcpAddr: "129.211.213.76:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口不是本机的
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的 wsAddr: "ws://129.211.213.76:15200" # web访问的长连接地址注意这里是负载均衡服务器的ip和端口不是本机的
cluster: cluster:
nodeId: 1003 # 节点id nodeId: 1003 # 节点id
apiUrl: "http://192.168.12.3:5001" # 当前节点内网的api地址 apiUrl: "http://10.206.0.8:5001" # 当前节点内网的api地址
serverAddr: "192.168.12.3:11110" # 当前节点内网的分布式通讯地址 serverAddr: "10.206.0.8:11110" # 当前节点内网的分布式通讯地址
nodes: initNodes:
- "1001@192.168.12.1:11100" - "1001@10.206.0.13:11110"
- "1002@192.168.12.2:11100" - "1002@10.206.0.14:11110"
- "1003@192.168.12.3:11100" - "1003@10.206.0.8:11110"
``` ```
#### 配置`nginx` #### 配置`nginx`
```nginx ```nginx
# api负载均衡 user nginx;
upstream wukongimapi { worker_processes auto;
server 192.168.12.1:5001;
server 192.168.12.2:5001; error_log /var/log/nginx/error.log notice;
server 192.168.12.3:5001; pid /var/run/nginx.pid;
events {
worker_connections 1024;
} }
# demo负载均衡 http {
upstream wukongimdemo { include /etc/nginx/mime.types;
server 192.168.12.1:5172; default_type application/octet-stream;
server 192.168.12.2:5172;
server 192.168.12.3:5172; log_format main '$remote_addr - $remote_user [$time_local] "$request" '
} '$status $body_bytes_sent "$http_referer" '
# manager负载均衡 '"$http_user_agent" "$http_x_forwarded_for"';
upstream wukongimanager {
server 192.168.12.1:5300; access_log /var/log/nginx/access.log main;
server 192.168.12.2:5300;
server 192.168.12.3:5300; sendfile on;
} #tcp_nopush on;
# ws负载均衡
upstream wukongimws { keepalive_timeout 65;
server 192.168.12.1:5200;
server 192.168.12.2:5200; #gzip on;
server 192.168.12.3:5200;
} include /etc/nginx/conf.d/*.conf;
# tcp负载均衡
upstream wukongimtcp {
server 192.168.12.1:5100; # api负载均衡
server 192.168.12.2:5100; upstream wukongimapi {
server 192.168.12.3:5100; server 10.206.0.13:5001;
} server 10.206.0.14:5001;
# http api转发 server 10.206.0.8:5001;
server { }
listen 5001; # demo负载均衡
location / { upstream wukongimdemo {
proxy_pass http://wukongimapi; server 10.206.0.13:5172;
proxy_connect_timeout 20s; server 10.206.0.14:5172;
proxy_read_timeout 60s; server 10.206.0.8:5172;
} }
} # manager负载均衡
# demo upstream wukongimanager {
server { server 10.206.0.13:5300;
listen 5172; server 10.206.0.14:5300;
location / { server 10.206.0.8:5300;
proxy_pass http://wukongimdemo; }
proxy_connect_timeout 20s; # ws负载均衡
proxy_read_timeout 60s; upstream wukongimws {
} server 10.206.0.13:5200;
location /login { server 10.206.0.14:5200;
rewrite ^ /chatdemo?apiurl=http://222.222.222.1:15001; server 10.206.0.8:5200;
proxy_pass http://wukongimdemo; }
proxy_connect_timeout 20s; # http api转发
proxy_read_timeout 60s; server {
} listen 5001;
} location / {
# manager proxy_pass http://wukongimapi;
server { proxy_connect_timeout 20s;
listen 5300; proxy_read_timeout 60s;
location / { }
proxy_pass http://wukongimanager; }
proxy_connect_timeout 60s; # demo
proxy_read_timeout 60s; server {
} listen 5172;
} location / {
# ws proxy_pass http://wukongimdemo;
server { proxy_connect_timeout 20s;
listen 5200; proxy_read_timeout 60s;
location / { }
proxy_pass http://wukongimws; location /login {
proxy_redirect off; rewrite ^ /chatdemo?apiurl=http://119.45.229.172:15001;
proxy_http_version 1.1; proxy_pass http://wukongimdemo;
# nginx接收upstream server数据超时, 默认120s, 如果连续的120s内没有收到1个字节, 连接关闭 proxy_connect_timeout 20s;
proxy_read_timeout 120s; proxy_read_timeout 60s;
# nginx发送数据至upstream server超时, 默认120s, 如果连续的120s内没有发送1个字节, 连接关闭 }
proxy_send_timeout 120s; }
# nginx与upstream server的连接超时时间 # manager
proxy_connect_timeout 4s; server {
proxy_set_header X-Real-IP $remote_addr; listen 5300;
proxy_set_header Upgrade $http_upgrade; location / {
proxy_set_header Connection "upgrade"; proxy_pass http://wukongimanager;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
# ws
server {
listen 5200;
location / {
proxy_pass http://wukongimws;
proxy_redirect off;
proxy_http_version 1.1;
# nginx接收upstream server数据超时, 默认120s, 如果连续的120s内没有收到1个字节, 连接关闭
proxy_read_timeout 120s;
# nginx发送数据至upstream server超时, 默认120s, 如果连续的120s内没有发送1个字节, 连接关闭
proxy_send_timeout 120s;
# nginx与upstream server的连接超时时间
proxy_connect_timeout 4s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
} }
} }
# tcp # tcp
server { stream {
listen: 5100; # tcp负载均衡
upstream wukongimtcp {
server 10.206.0.13:5100;
server 10.206.0.14:5100;
server 10.206.0.8:5100;
}
server {
listen 5100;
proxy_connect_timeout 4s; proxy_connect_timeout 4s;
proxy_timeout 120s; proxy_timeout 120s;
proxy_pass wukongimtcp; proxy_pass wukongimtcp;
}
} }
``` ```
`记得重启nginx生效` `记得重启nginx生效`
## 启动或停止 ## 启动或停止
@ -228,15 +263,27 @@ server {
## 开放端口 ## 开放端口
#### 外网开放
| 端口 | 说明 | | 端口 | 说明 |
| --- | --- | | --- | --- |
| 15001 | http api 端口 (仅内部局域网开放) | | 15001 | http api 端口 (仅内部局域网开放) |
| 15100 | tcp 端口 app端需要能访问到 | | 15100 | tcp 端口 app端需要能访问到 |
| 15200 | websocket 端口 web im端需要能访问到 | | 15200 | websocket 端口 web im端需要能访问到 |
| 15300 | 后台管理系统的端口 访问地址: http://127.0.0.1:5300/web | | 15300 | 后台管理系统的端口|
| 15172 | demo的端口用于演示wukongim通讯能力的demo 访问地址: http://127.0.0.1:15172/login | | 15172 | demo的端口用于演示wukongim通讯能力的demo |
#### 内网开放(需要节点之间能访问到)
| 端口 | 说明 |
| --- | --- |
| 5001 | http api 端口 (仅内部局域网开放) |
| 5100 | tcp 端口 分布式情况下只需内网开放 |
| 5200 | websocket 端口 ,分布式情况下只需内网开放 web im端需要能访问到 |
| 5300 | 后台管理系统的端口|
## 验证 ## 验证
1. 访问`http://222.222.222.1:15172/login`,随便输入用户名和密码,登录后可以聊天,说明部署成功。 1. 访问`http://119.45.229.172:15172/login`,随便输入用户名和密码,登录后可以聊天,说明部署成功。
2. 访问 ` http://119.45.229.172:15300/web` 可以进入后台管理系统 默认系统内置的guest只有读权限如果需要操作权限请看[授权的配置](/server/config/auth) 。

View File

@ -63,91 +63,127 @@ cluster:
## 配置`nginx` ## 配置`nginx`
```nginx ```nginx
# api负载均衡 user nginx;
upstream wukongimapi { worker_processes auto;
server 192.168.1.10:5001;
server 192.168.1.20:5001; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
} }
# demo负载均衡
upstream wukongimdemo {
server 192.168.1.10:5172; http {
server 192.168.1.20:5172; include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
# api负载均衡
upstream wukongimapi {
server 192.168.1.10:5001;
server 192.168.1.20:5001;
}
# demo负载均衡
upstream wukongimdemo {
server 192.168.1.10:5172;
server 192.168.1.20:5172;
}
# manager负载均衡
upstream wukongimanager {
server 192.168.1.10:5300;
server 192.168.1.20:5300;
}
# ws负载均衡
upstream wukongimws {
server 192.168.1.10:5200;
server 192.168.1.20:5200;
}
# http api转发
server {
listen 5001;
location / {
proxy_pass http://wukongimapi;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
}
# demo
server {
listen 5172;
location / {
proxy_pass http://wukongimdemo;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
location /login {
rewrite ^ /chatdemo?apiurl=http://221.123.68.10:15001;
proxy_pass http://wukongimdemo;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
}
# manager
server {
listen 5300;
location / {
proxy_pass http://wukongimanager;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
# ws
server {
listen 5200;
location / {
proxy_pass http://wukongimws;
proxy_redirect off;
proxy_http_version 1.1;
# nginx接收upstream server数据超时, 默认120s, 如果连续的120s内没有收到1个字节, 连接关闭
proxy_read_timeout 120s;
# nginx发送数据至upstream server超时, 默认120s, 如果连续的120s内没有发送1个字节, 连接关闭
proxy_send_timeout 120s;
# nginx与upstream server的连接超时时间
proxy_connect_timeout 4s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
} }
# manager负载均衡
upstream wukongimanager { # tcp
server 192.168.1.10:5300; stream {
server 192.168.1.20:5300; # tcp负载均衡
} upstream wukongimtcp {
# ws负载均衡
upstream wukongimws {
server 192.168.1.10:5200;
server 192.168.1.20:5200;
}
# tcp负载均衡
upstream wukongimtcp {
server 192.168.1.10:5100; server 192.168.1.10:5100;
server 192.168.1.20:5100; server 192.168.1.20:5100;
} }
# http api转发 server {
server { listen 5100;
listen 5001;
location / {
proxy_pass http://wukongimapi;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
}
# demo
server {
listen 5172;
location / {
proxy_pass http://wukongimdemo;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
location /login {
rewrite ^ /chatdemo?apiurl=http://127.0.0.1:15001;
proxy_pass http://wukongimdemo;
proxy_connect_timeout 20s;
proxy_read_timeout 60s;
}
}
# manager
server {
listen 5300;
location / {
proxy_pass http://wukongimanager;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
}
# ws
server {
listen 5200;
location / {
proxy_pass http://wukongimws;
proxy_redirect off;
proxy_http_version 1.1;
# nginx接收upstream server数据超时, 默认120s, 如果连续的120s内没有收到1个字节, 连接关闭
proxy_read_timeout 120s;
# nginx发送数据至upstream server超时, 默认120s, 如果连续的120s内没有发送1个字节, 连接关闭
proxy_send_timeout 120s;
# nginx与upstream server的连接超时时间
proxy_connect_timeout 4s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# tcp
server {
listen: 5100;
proxy_connect_timeout 4s; proxy_connect_timeout 4s;
proxy_timeout 120s; proxy_timeout 120s;
proxy_pass wukongimtcp; proxy_pass wukongimtcp;
}
} }
``` ```
## 重启 ## 重启

View File

@ -40,14 +40,18 @@ chmod +x wukongim
```yaml ```yaml
mode: "release" mode: "release"
rootDir: "./wukongim_data"
cluster: cluster:
nodeId: 1001 # 节点id nodeId: 1001 # 节点id
serverAddr: "xx.xx.xx.xx:11110" # 节点内部通信请求地址
external: # 公网配置 external: # 公网配置
ip: "" # 节点外网IP客户端能够访问到的IP地址。 ip: "xx.xx.xx.xx" # 节点外网IP客户端能够访问到的IP地址。
``` ```
`ip修改为服务器的外网IP地址` `ip修改为服务器的外网IP地址`
`serverAddr的xx.xx.xx.xx修改为服务器的内网IP地址`
4. 启动或停止 4. 启动或停止
``` bash ``` bash

View File

@ -400,7 +400,7 @@ public class WKMessageContent {
### 离线消息接收 ### 离线消息接收
因为悟空 IM 是支持消息永久存储,所以会产生海量的离线消息。对此我们采用了按需拉取的机制,如 10 个会话一个会话 10 万条消息,悟空 IM 不会把这个 10\*10 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化和监听获取数据的回调即可。 因为WuKongIM 是支持消息永久存储,所以会产生海量的离线消息。对此我们采用了按需拉取的机制,如 10 个会话一个会话 10 万条消息,WuKongIM 不会把这个 10\*10 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化和监听获取数据的回调即可。
##### 监听同步最近会话 ##### 监听同步最近会话
@ -696,7 +696,7 @@ WKIM.getInstance().conversationManager.deleteMsg( channelId, channelType)
### 频道管理(置顶,免打扰等等) ### 频道管理(置顶,免打扰等等)
频道(Channel)悟空 IM 中是一个比较抽象的概念。发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情。 更多介绍请移步[什么是频道](/guide/initialize#频道) 频道(Channel)WuKongIM 中是一个比较抽象的概念。发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情。 更多介绍请移步[什么是频道](/guide/initialize#频道)
#### 频道属性 #### 频道属性
@ -801,7 +801,7 @@ WKIM.getInstance().channelManager.addOnGetChannelInfoListener { channelID, chann
### 自定义普通消息 ### 自定义普通消息
悟空 IM 中所有的消息类型都是自定义消息。下面我们以名片消息举例 WuKongIM 中所有的消息类型都是自定义消息。下面我们以名片消息举例
#### 第一步 定义消息 #### 第一步 定义消息
@ -967,7 +967,7 @@ WKIM.getInstance().getMsgManager().registerContentMsg(WKCardContent.class);
### 自定义附件消息 ### 自定义附件消息
我们在发送消息的时候有时需发送带附件的消息。悟空 IM 也提供自定义附件消息,自定义附件消息和普通消息区别不大。下面我们已地理位置消息举例 我们在发送消息的时候有时需发送带附件的消息。WuKongIM 也提供自定义附件消息,自定义附件消息和普通消息区别不大。下面我们已地理位置消息举例
#### 第一步 定义消息 #### 第一步 定义消息
@ -1175,7 +1175,7 @@ WKIMWKIM.getInstance().msgManager.updateContent(clientMsgNo, messageContent)
### 消息扩展 ### 消息扩展
随着业务的发展应用在聊天中的功能也日益增多,为了满足绝大部分的需求 悟空 IM 中增加了消息扩展功能。消息扩展分`本地扩展``远程扩展`,本地扩展只针对 app 本地使用卸载 app 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复 随着业务的发展应用在聊天中的功能也日益增多,为了满足绝大部分的需求 WuKongIM 中增加了消息扩展功能。消息扩展分`本地扩展``远程扩展`,本地扩展只针对 app 本地使用卸载 app 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复
#### 本地扩展 #### 本地扩展

View File

@ -208,7 +208,7 @@ class WKMsg {
### 离线消息接收 ### 离线消息接收
因为悟空 IM 是支持消息永久存储,所以会产生海量的离线消息。对此我们采用了按需拉取的机制,如 10 个会话一个会话 10 万条消息,悟空 IM 不会把这个 10\*10 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化和监听获取数据的回调即可。 因为WuKongIM 是支持消息永久存储,所以会产生海量的离线消息。对此我们采用了按需拉取的机制,如 10 个会话一个会话 10 万条消息,WuKongIM 不会把这个 10\*10 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化和监听获取数据的回调即可。
##### 监听同步最近会话 ##### 监听同步最近会话
@ -409,7 +409,7 @@ WKIM.shared.conversationManager.deleteMsg(channelId,channelType);
### 频道管理(置顶,免打扰等等) ### 频道管理(置顶,免打扰等等)
频道(Channel)悟空 IM 中是一个比较抽象的概念。发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情。 更多介绍请移步[什么是频道](/guide/initialize#频道) 频道(Channel)WuKongIM 中是一个比较抽象的概念。发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情。 更多介绍请移步[什么是频道](/guide/initialize#频道)
#### 频道属性 #### 频道属性
```dart ```dart
@ -501,7 +501,7 @@ WKIM.shared.channelManager.addOnGetChannelListener((channelId, channelType, back
### 自定义普通消息 ### 自定义普通消息
悟空 IM 中所有的消息类型都是自定义消息。下面我们以`gif`消息举例 WuKongIM 中所有的消息类型都是自定义消息。下面我们以`gif`消息举例
#### 第一步 定义消息 #### 第一步 定义消息
@ -566,7 +566,7 @@ WKIM.shared.messageManager.registerMsgContent(WkMessageContentType.gif,
### 自定义附件消息 ### 自定义附件消息
我们在发送消息的时候有时需发送带附件的消息。悟空 IM 也提供自定义附件消息,自定义附件消息和普通消息区别不大。下面我们图片消息举例 我们在发送消息的时候有时需发送带附件的消息。WuKongIM 也提供自定义附件消息,自定义附件消息和普通消息区别不大。下面我们图片消息举例
#### 第一步 定义消息 #### 第一步 定义消息
@ -669,7 +669,7 @@ WKIM.shared.messageManager.updateContent(String clientMsgNo, WKMessageContent me
``` ```
### 消息扩展 ### 消息扩展
随着业务的发展应用在聊天中的功能也日益增多,为了满足绝大部分的需求 悟空 IM 中增加了消息扩展功能。消息扩展分`本地扩展``远程扩展`,本地扩展只针对 app 本地使用卸载 app 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复 随着业务的发展应用在聊天中的功能也日益增多,为了满足绝大部分的需求 WuKongIM 中增加了消息扩展功能。消息扩展分`本地扩展``远程扩展`,本地扩展只针对 app 本地使用卸载 app 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复
#### 本地扩展 #### 本地扩展

View File

@ -250,7 +250,7 @@ WKTextContent *content = [[WKTextContent alloc] initWithContent:@"hello"];
## 离线消息接收 ## 离线消息接收
在**悟空 IM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**悟空 IM**不会把这个 10\*10 万=100 万条消息都拉取到本地。 在**WuKongIM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**WuKongIM**不会把这个 10\*10 万=100 万条消息都拉取到本地。
而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。
这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化
@ -605,7 +605,7 @@ cmd 消息由服务端下发客户端解析。
[什么是频道](/guide/initialize#频道) [什么是频道](/guide/initialize#频道)
频道是\*\*悟空 IM 里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情 频道是\*\*WuKongIM 里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
频道的属性 频道的属性
@ -1063,7 +1063,7 @@ cmd 消息由服务端下发客户端解析。
### 消息编辑 ### 消息编辑
当我们发现发送的消息内容有误后,我们无需撤回后再编辑再发送,**悟空 IM**提供直接在发出去的消息上进行编辑的功能 当我们发现发送的消息内容有误后,我们无需撤回后再编辑再发送,**WuKongIM**提供直接在发出去的消息上进行编辑的功能
<!-- <img src="./edit_before.png" width="250px">&nbsp;&nbsp; --> <!-- <img src="./edit_before.png" width="250px">&nbsp;&nbsp; -->
<!-- <img src="./edit_after.png" width="250px"> --> <!-- <img src="./edit_after.png" width="250px"> -->

View File

@ -153,7 +153,7 @@ WKSDK.shared().chatManager.addMessageStatusListener((packet: SendackPacket) => {
WKSDK.shared().chatManager.addMessageListener((message: Message) => {}); WKSDK.shared().chatManager.addMessageListener((message: Message) => {});
``` ```
## 离线消息接收 ## 离线消息接收
在悟空 **IM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**悟空 IM** 不会把这个 **1010** 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化 在悟空 **IM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**WuKongIM** 不会把这个 **1010** 万=100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化
### 数据源设置 ### 数据源设置
``` js ``` js
@ -297,7 +297,7 @@ class Conversation {
[什么是频道](/guide/initialize#频道) [什么是频道](/guide/initialize#频道)
频道是**悟空 IM**里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情 频道是**WuKongIM**里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
频道的属性 频道的属性

View File

@ -244,7 +244,7 @@ startMessageSeq=100 endMessageSeq=0 limit=10 以limit为准则返回的messag
## 离线消息 ## 离线消息
在悟空 **IM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**悟空 IM** 不会把100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化 在悟空 **IM**中为了应付海量离线消息,采用了按需拉取的机制,比如 10 个会话一个会话 10 万条消息,**WuKongIM** 不会把100 万条消息都拉取到本地。 而是采用拉取这 10 个会话的信息和对应的最新 20 条消息,也就是实际只拉取了 200 条消息 相对 100 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。 这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化

View File

@ -1,23 +1,23 @@
# 集成到自己系统 # 集成到自己系统
`所有悟空IM的接口不要直接给APP端调用应该前端先调用自己的业务API业务API再调用悟空IM的API并且悟空IM的API不要暴露给外网这样可以保证数据的安全性。` `所有WuKongIM的接口不要直接给APP端调用应该前端先调用自己的业务API业务API再调用WuKongIM的API并且WuKongIM的API不要暴露给外网这样可以保证数据的安全性。`
## 第一步:对接自己业务系统的用户 ## 第一步:对接自己业务系统的用户
![集成用户流程](./integration.png) ![集成用户流程](./integration.png)
1. 您的应用调用自己的登录或注册的业务接口。 1. 您的应用调用自己的登录或注册的业务接口。
2. 您的登录或注册的业务接口处理完自己的业务逻辑后将生成的用户 IDuid和 token调用悟空 IM 的[登录或注册用户](/api/user#注册用户)接口更新到悟空 IM 2. 您的登录或注册的业务接口处理完自己的业务逻辑后将生成的用户 IDuid和 token调用WuKongIM 的[登录或注册用户](/api/user#注册用户)接口更新到WuKongIM
3. 将 uid 和 token 返回给您自己的应用端。 3. 将 uid 和 token 返回给您自己的应用端。
4. 应用端调用悟空 IM 的 SDK 的 connect 方法,将 uid 和 token 传入,悟空 IM 的 SDK 会将 uid 和 token 传给悟空 IM 的服务端进行校验,如果客户端传的跟服务端传的一致将校验通过,校验通过后将保持长连接 4. 应用端调用WuKongIM 的 SDK 的 connect 方法,将 uid 和 token 传入WuKongIM 的 SDK 会将 uid 和 token 传给WuKongIM 的服务端进行校验,如果客户端传的跟服务端传的一致将校验通过,校验通过后将保持长连接
## 第二步:提供 Webhook 接口 ## 第二步:提供 Webhook 接口
第三方服务提供一个 http api 接口,悟空 IM 将按照 Webhook[(详见文档)](/api/webhook)的约定将对应的数据按照事件的机制传递给此接口。 第三方服务提供一个 http api 接口,WuKongIM 将按照 Webhook[(详见文档)](/api/webhook)的约定将对应的数据按照事件的机制传递给此接口。
## 第三步:配置 Webhook 接口到悟空 IM ## 第三步:配置 Webhook 接口到WuKongIM
将您的 http api 接口配置到**_悟空 IM_**内。 将您的 http api 接口配置到**_WuKongIM_**内。
```yaml ```yaml
--- ---
@ -25,4 +25,4 @@ webhook: #
httpAddr: 'http://xxxxx' # webhook的http地址 通过此地址通知数据给第三方 httpAddr: 'http://xxxxx' # webhook的http地址 通过此地址通知数据给第三方
``` ```
集成了悟空 IM 的 SDK 的应用的事件将会推送到第三方系统内,比如用户上线后,**_悟空 SDK_**会通知到**_悟空 IM_**端,**_悟空 IM_**将上线事件通过配置的 webhook 地址推送到第三方服务器。 集成了WuKongIM 的 SDK 的应用的事件将会推送到第三方系统内,比如用户上线后,**_悟空 SDK_**会通知到**_WuKongIM_**端,**_WuKongIM_**将上线事件通过配置的 webhook 地址推送到第三方服务器。

View File

@ -1,8 +1,8 @@
# 离线消息 # 离线消息
*悟空IM* 采用读扩散模式, 什么是读扩散和写扩散? 参考文章:[链接](https://blog.csdn.net/m0_53246313/article/details/122674197) *WuKongIM* 采用读扩散模式, 什么是读扩散和写扩散? 参考文章:[链接](https://blog.csdn.net/m0_53246313/article/details/122674197)
*悟空IM*开启最近会话配置后,*悟空IM*会在服务端为每个用户维护一份属于自己的最近会话列表。([什么是最近会话?](/guide/initialize.html#%E6%9C%80%E8%BF%91%E4%BC%9A%E8%AF%9D)) *WuKongIM*开启最近会话配置后,*WuKongIM*会在服务端为每个用户维护一份属于自己的最近会话列表。([什么是最近会话?](/guide/initialize.html#%E6%9C%80%E8%BF%91%E4%BC%9A%E8%AF%9D))
1. 应用由离线变成在线后,需要同步最近会话列表,如下图 1. 应用由离线变成在线后,需要同步最近会话列表,如下图

View File

@ -1,4 +1,4 @@
# 悟空 IM 协议 # WuKongIM 协议
## 控制报文结构 ## 控制报文结构
@ -10,7 +10,7 @@
## 固定报头 ## 固定报头
每个 悟空 IM 控制报文都包含一个固定报头 每个 WuKongIM 控制报文都包含一个固定报头
<table> <table>
<tr> <tr>
@ -26,7 +26,7 @@
</tr> </tr>
<tr> <tr>
<td>byte 1</td> <td>byte 1</td>
<td colspan="4">悟空IM控制报文的类型</td> <td colspan="4">WuKongIM控制报文的类型</td>
<td colspan="4">用于指定控制报文类型的标志位</td> <td colspan="4">用于指定控制报文类型的标志位</td>
</tr> </tr>
<tr> <tr>
@ -35,7 +35,7 @@
</tr> </tr>
</table> </table>
#### 悟空 IM 控制报文的类型 #### WuKongIM 控制报文的类型
<table> <table>
<tr> <tr>
@ -155,9 +155,9 @@ Connack协议中的标志位
单个字节最大值0111111116 进制0x7F10 进制为 127。 单个字节最大值0111111116 进制0x7F10 进制为 127。
悟空 IM 协议规定,第八位(最高位)若为 1则表示还有后续字节存在。 WuKongIM 协议规定,第八位(最高位)若为 1则表示还有后续字节存在。
悟空 IM 协议最多允许 4 个字节表示剩余长度。最大长度为0xFF,0xFF,0xFF,0x7F二进制表示为:11111111,11111111,11111111,01111111十进制268435455 byte=261120KB=256MB=0.25GB 四个字节之间值的范围: WuKongIM 协议最多允许 4 个字节表示剩余长度。最大长度为0xFF,0xFF,0xFF,0x7F二进制表示为:11111111,11111111,11111111,01111111十进制268435455 byte=261120KB=256MB=0.25GB 四个字节之间值的范围:
| Digits | From | To | | Digits | From | To |
| ------ | ---------------------------------- | ------------------------------------ | | ------ | ---------------------------------- | ------------------------------------ |
@ -174,7 +174,7 @@ Connack协议中的标志位
#### 字符串 UTF-8 编码 #### 字符串 UTF-8 编码
有关字符串,悟空 IM 采用的是修改版的 UTF-8 编码,一般形式为如下: 有关字符串,WuKongIM 采用的是修改版的 UTF-8 编码,一般形式为如下:
<table> <table>
<tr> <tr>

View File

@ -5,7 +5,7 @@ order: 200
# 频道 # 频道
频道是**悟空 IM**里最重要的一个概念,如果还不知道什么是频道请查看[什么是频道?](/guide/initialize#频道) 频道是**WuKongIM**里最重要的一个概念,如果还不知道什么是频道请查看[什么是频道?](/guide/initialize#频道)
## 创建或更新频道 ## 创建或更新频道

View File

@ -5,11 +5,11 @@ order: 500
# Datasource # Datasource
数据源解决的问题主要是一些现有系统里已有群成员和一些其他数据,需要无缝对接到**悟空 IM**通讯里,那么就可以通过数据源的形式对接 数据源解决的问题主要是一些现有系统里已有群成员和一些其他数据,需要无缝对接到**WuKongIM**通讯里,那么就可以通过数据源的形式对接
`数据源只有在重启后第一次启动时才会加载,如果需要重新加载数据源,需要重启服务` `数据源只有在重启后第一次启动时才会加载,如果需要重新加载数据源,需要重启服务`
**悟空 IM**会调用 datasource 配置的 api 地址,通过 POST 的方式进行请求 **WuKongIM**会调用 datasource 配置的 api 地址,通过 POST 的方式进行请求
请求数据格式如下: 请求数据格式如下:
@ -24,7 +24,7 @@ order: 500
### 获取订阅者(群成员) ### 获取订阅者(群成员)
当**悟空 IM**通讯端需要获取订阅者列表的时候就会调用此 cmd 进行获取 当**WuKongIM**通讯端需要获取订阅者列表的时候就会调用此 cmd 进行获取
请求参数 请求参数

View File

@ -26,7 +26,7 @@ API 规则:
## 长连接地址获取 ## 长连接地址获取
获取客户端连接**悟空 IM**的地址 获取客户端连接**WuKongIM**的地址
> GET /route?uid=xxxx // uid 为用户 ID > GET /route?uid=xxxx // uid 为用户 ID

View File

@ -1,11 +1,11 @@
# API调用时机说明 # API调用时机说明
所有悟空IM的API应该都由业务后端调用业务后端再将结果返回给app不要将悟空IM的API暴露给app。 所有WuKongIM的API应该都由业务后端调用业务后端再将结果返回给app不要将WuKongIM的API暴露给app。
## app用户注册/登录时 ## app用户注册/登录时
业务后端需要调用悟空IM的接口将用户注册到悟空IM。 业务后端需要调用WuKongIM的接口将用户注册到WuKongIM。
[注册或登录](/server/api/user.html#注册或登录) [注册或登录](/server/api/user.html#注册或登录)

View File

@ -7,7 +7,7 @@ order: 1
## 注册或登录 ## 注册或登录
将用户信息注册到悟空 IM如果存在则更新 将用户信息注册到WuKongIM如果存在则更新
> POST /user/token > POST /user/token

View File

@ -5,7 +5,7 @@ order: 400
# Webhook # Webhook
**悟空 IM**的一些数据将通过 webhook 的形式回调给第三方应用服务,比如用户在线状态,需要推送的消息,所有消息等等,所有 webhook 都是 POST 请求,事件名通过 query 参数传入, **WuKongIM**的一些数据将通过 webhook 的形式回调给第三方应用服务,比如用户在线状态,需要推送的消息,所有消息等等,所有 webhook 都是 POST 请求,事件名通过 query 参数传入,
比如 第三方的服务器提供的 webhook 地址为 http://example/webhook 那么在线状态的 webhook 为 比如 第三方的服务器提供的 webhook 地址为 http://example/webhook 那么在线状态的 webhook 为
``` ```
@ -68,7 +68,7 @@ type MessageResp struct {
## 所有消息通知 ## 所有消息通知
**悟空 IM**服务端会将所有消息推送给第三方服务器(为了降低第三方服务器的压力,并不是一条一条推送,做了延迟处理,默认是 500 毫秒(`webhook.msgNotifyEventPushInterval`)批量推送一次,这个可自己视情况配置),第三方服务器可视情况保存或不保存(有一些业务需要保存,比如将消息存入 ElasticSearch给客户端做搜索使用不管保不保存**悟空 IM**服务端都会保存用户的消息。 **WuKongIM**服务端会将所有消息推送给第三方服务器(为了降低第三方服务器的压力,并不是一条一条推送,做了延迟处理,默认是 500 毫秒(`webhook.msgNotifyEventPushInterval`)批量推送一次,这个可自己视情况配置),第三方服务器可视情况保存或不保存(有一些业务需要保存,比如将消息存入 ElasticSearch给客户端做搜索使用不管保不保存**WuKongIM**服务端都会保存用户的消息。
`事件名msg.notify` `事件名msg.notify`