mirror of
https://github.com/WuKongIM/WuKongIMDocs
synced 2025-05-30 04:47:43 +00:00
docs: update
This commit is contained in:
parent
a5dda0b9df
commit
eb5a8f9cd4
@ -7,7 +7,7 @@ import { navbar } from "./navbar";
|
||||
import { sidebar } from "./sidebar";
|
||||
|
||||
export default defineConfig({
|
||||
title: "悟空IM",
|
||||
title: "WuKongIM",
|
||||
description: "IM",
|
||||
lang: "zh-CN",
|
||||
head: [
|
||||
@ -28,7 +28,7 @@ export default defineConfig({
|
||||
srcDir: "./src",
|
||||
themeConfig: {
|
||||
logo: "/logo.png",
|
||||
siteTitle: "悟空IM",
|
||||
siteTitle: "WuKongIM",
|
||||
nav: navbar,
|
||||
sidebar: sidebar,
|
||||
lastUpdatedText: "上次更新",
|
||||
|
@ -7,7 +7,7 @@ export const sidebar: DefaultTheme.Sidebar = {
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "文档阅读引导", link: "/guide/guide" },
|
||||
{ text: "什么是悟空 IM", link: "/guide/" },
|
||||
{ text: "什么是WuKongIM", link: "/guide/" },
|
||||
{ text: "基础概念", link: "/guide/initialize" },
|
||||
{ text: "适用场景", link: "/guide/scene" },
|
||||
],
|
||||
@ -15,8 +15,8 @@ export const sidebar: DefaultTheme.Sidebar = {
|
||||
],
|
||||
"/install/": [
|
||||
{
|
||||
text: "Dokcer Compose",
|
||||
collapsed: true,
|
||||
text: "Dokcer Compose(推荐)",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{
|
||||
text: "部署",
|
||||
@ -123,7 +123,7 @@ export const sidebar: DefaultTheme.Sidebar = {
|
||||
items: [
|
||||
{ text: "离线消息说明", link: "/server/advance/offlinemsg" },
|
||||
{ text: "集成到自己系统", link: "/server/advance/integration" },
|
||||
{ text: "悟空 IM 协议", link: "/server/advance/proto" },
|
||||
{ text: "WuKongIM 协议", link: "/server/advance/proto" },
|
||||
],
|
||||
},
|
||||
],
|
||||
|
@ -3,7 +3,9 @@
|
||||
"version": "1.0.0",
|
||||
"description": "wukongim文档",
|
||||
"keywords": [
|
||||
"悟空IM",
|
||||
"WuKongIM",
|
||||
"WuKong",
|
||||
"WuKongIM",
|
||||
"IM"
|
||||
],
|
||||
"type": "module",
|
||||
|
@ -14,15 +14,15 @@
|
||||
|
||||
## 访问 安装WuKongIM
|
||||
|
||||
1. 访问悟空IM监控系统
|
||||
1. 访问WuKongIM监控系统
|
||||
|
||||

|
||||

|
||||
|
||||
2. 访问悟空IM Demo
|
||||
2. 访问WuKongIM Demo
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
@ -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"
|
||||
```
|
||||
|
||||
--server: 为部署的`悟空IM`服务器地址,默认端口 5001
|
||||
--token: 为`悟空IM`服务器的 token,默认为空
|
||||
--server: 为部署的`WuKongIM`服务器地址,默认端口 5001
|
||||
--token: 为`WuKongIM`服务器的 token,默认为空
|
||||
|
||||
## run 命令
|
||||
|
||||
@ -51,7 +51,7 @@ wk doctor
|
||||
|
||||
## upgrade 命令
|
||||
|
||||
升级`悟空IM`端(在部署了服务器的机器上运行才有效)
|
||||
升级`WuKongIM`端(在部署了服务器的机器上运行才有效)
|
||||
|
||||
```shell
|
||||
wk upgrade
|
||||
|
@ -22,12 +22,12 @@ title: 介绍
|
||||
|
||||
| 项目名 | 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| 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 |
|
||||
| WuKongIMReactNativeDemo | [Github](https://github.com/wengqianshan/WuKongIMReactNative) | 无 | 无 | 悟空IM的 React Native Demo(由贡献者 [wengqianshan](https://github.com/wengqianshan) 提供) |
|
||||
| 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) | 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) | 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) | 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) | WuKongIM的 Flutter SDK |
|
||||
| WuKongIMReactNativeDemo | [Github](https://github.com/wengqianshan/WuKongIMReactNative) | 无 | 无 | WuKongIM的 React Native Demo(由贡献者 [wengqianshan](https://github.com/wengqianshan) 提供) |
|
||||
|
||||
有需要加微信群交流:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# 什么是悟空 IM
|
||||
# 什么是WuKongIM
|
||||
|
||||
高性能通用分布式通讯服务,支持聊天应用,消息推送,物联网通讯,音视频信令,直播弹幕,客服系统,AI 通讯,即时社区等场景。
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
## 特性
|
||||
|
||||
悟空 IM 具备以下特性:
|
||||
`WuKongIM` 具备以下特性:
|
||||
|
||||
<!-- - 0⃣️ **零依赖**:没有依赖任何第三方中间件,部署简单,一条命令即可启动
|
||||
- 📚 **自研可控**:基于pebble kv数据库消息数据库,消息分区永久存储,自研二进制协议,支持自定义协议
|
||||
@ -32,13 +32,13 @@
|
||||
|
||||
🚀 **性能**
|
||||
|
||||
基于pebble kv数据库,研发了针对于IM这种服务的特有分布式数据库,省了其他数据库为了通用性而带来的性能损耗。
|
||||
基于pebble kv数据库,研发了针对于IM这种服务的特有分布式数据库,省了其他数据库为了通用性而带来的性能损耗, 因为存储快,所以消息快。
|
||||
|
||||
🔥**高可用**
|
||||
|
||||
通过魔改raft分布式协议,实现了自动容灾,一台机器宕机,另一台机器自动接管,对外无感知。
|
||||
|
||||
去中心化,无单点,无中心节点,每个节点都是独立的,都可以提供服务。
|
||||
去中心化,无单点,无中心节点,每个节点都是独立且平等的,都可以提供服务。
|
||||
|
||||
扩容方便,只需增加机器,不需要停机,不需要迁移数据,自动按策略分配数据。
|
||||
|
||||
|
@ -18,13 +18,13 @@
|
||||
|
||||
### 用户
|
||||
|
||||
由第三方系统注册到***悟空IM***系统内的uid称为用户。
|
||||
由第三方系统注册到***WuKongIM***系统内的uid称为用户。
|
||||
|
||||
用户有 uid 和 token 两个重要字段,uid 是用户的唯一标识,token 是用户的身份凭证,进行长连接到**悟空 IM**服务时,需要携带 token 进行身份验证。
|
||||
用户有 uid 和 token 两个重要字段,uid 是用户的唯一标识,token 是用户的身份凭证,进行长连接到**WuKongIM**服务时,需要携带 token 进行身份验证。
|
||||
|
||||
### 设备
|
||||
|
||||
连接到**悟空IM**服务的客户端称为设备。
|
||||
连接到**WuKongIM**服务的客户端称为设备。
|
||||
|
||||
一个用户可以有多个设备。
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
- 大群频道支持
|
||||
|
||||
<!-- 把联机的用户建立一个频道内,当A打了敌人后,A将数据告诉你们自己的业务服务器,业务服务器处理后调用悟空IM的发送消息接口,发送消息的频道参数指定为这个建立的频道,这样这个频道内所有人都能收到包括A -->
|
||||
<!-- 把联机的用户建立一个频道内,当A打了敌人后,A将数据告诉你们自己的业务服务器,业务服务器处理后调用WuKongIM的发送消息接口,发送消息的频道参数指定为这个建立的频道,这样这个频道内所有人都能收到包括A -->
|
||||
|
||||
## 音视频信令服务器
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
---
|
||||
layout: home
|
||||
|
||||
title: 悟空IM
|
||||
titleTemplate: 悟空IM
|
||||
title: WuKongIM
|
||||
titleTemplate: WuKongIM
|
||||
|
||||
hero:
|
||||
name: 悟空IM
|
||||
name: WuKongIM
|
||||
text: 让信息传递更简单
|
||||
tagline: 悟空IM是高性能通用即时通讯服务,支持聊天应用,消息推送,物联网通讯,音视频信令,直播弹幕,客服系统,AI 通讯,即时社区等场景。
|
||||
tagline: WuKongIM是高性能通用即时通讯服务,支持聊天应用,消息推送,物联网通讯,音视频信令,直播弹幕,客服系统,AI 通讯,即时社区等场景。
|
||||
image:
|
||||
src: /logo_white.png
|
||||
alt: logo
|
||||
|
@ -9,7 +9,7 @@
|
||||
|
||||
| 名称 | 内网IP | 外网IP |
|
||||
| --- | --- | --- |
|
||||
| node4(1004) | 192.168.12.4 | 222.222.222.4 |
|
||||
| node4(1004) | 10.206.0.6 | 146.56.232.98 |
|
||||
|
||||
|
||||
## 在node4上部署`WuKongIM`
|
||||
@ -19,35 +19,31 @@
|
||||
创建目录
|
||||
|
||||
```bash
|
||||
|
||||
mkdir ~/wukongim
|
||||
```
|
||||
|
||||
进入目录
|
||||
|
||||
```bash
|
||||
|
||||
cd ~/wukongim
|
||||
|
||||
```
|
||||
|
||||
#### 2. 在安装目录创建`docker-compose.yml`文件
|
||||
|
||||
|
||||
```yaml
|
||||
|
||||
version: '3.7'
|
||||
services:
|
||||
wukongim: # WuKongIM服务
|
||||
image: wukongim/wukongim:v2.0.1-beta-20240715
|
||||
image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v2.0.1-beta-20240715
|
||||
environment:
|
||||
- "WK_CLUSTER_NODEID=1004"
|
||||
- "WK_CLUSTER_APIURL=http://192.168.12.4:5001" # 节点内部通信api url地址,这里ip换成自己节点实际node2的内网ip
|
||||
- "WK_CLUSTER_SERVERADDR=192.168.12.4:11110" # 节点内部通信请求地址
|
||||
- "WK_CLUSTER_APIURL=http://10.206.0.6:5001" # 节点内部通信api url地址,这里ip换成自己节点实际node2的内网ip
|
||||
- "WK_CLUSTER_SERVERADDR=10.206.0.6:11110" # 节点内部通信请求地址
|
||||
- "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址
|
||||
- "WK_EXTERNAL_TCPADDR=119.45.229.172:15100" # app端访问的tcp长连接地址
|
||||
- "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:
|
||||
test: "wget -q -Y off -O /dev/null http://localhost:5001/health > /dev/null 2>&1"
|
||||
interval: 10s
|
||||
@ -62,6 +58,7 @@ services:
|
||||
- 5100:5100 # tcp端口
|
||||
- 5200:5200 # websocket端口
|
||||
- 5300:5300 # 管理端端口
|
||||
- 5172:5172 # demo端口
|
||||
|
||||
```
|
||||
|
||||
@ -74,7 +71,7 @@ scrape_configs:
|
||||
...
|
||||
- job_name: 'wukongim4-trace-metrics'
|
||||
static_configs:
|
||||
- targets: ['192.168.12.4:5300']
|
||||
- targets: ['10.206.0.6:5300']
|
||||
labels:
|
||||
id: "1003"
|
||||
|
||||
@ -89,53 +86,60 @@ scrape_configs:
|
||||
|
||||
upstream wukongimapi {
|
||||
...
|
||||
server 192.168.12.4:5001;
|
||||
server 10.206.0.6:5001;
|
||||
}
|
||||
|
||||
upstream wukongimdemo {
|
||||
...
|
||||
server 192.168.12.4:5172;
|
||||
server 10.206.0.6:5172;
|
||||
}
|
||||
|
||||
upstream wukongimanager {
|
||||
...
|
||||
server 192.168.12.4:5300;
|
||||
server 10.206.0.6:5300;
|
||||
}
|
||||
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
|
||||
|
||||
在node4进入安装目录(`~/wukongim`)里执行如下命令:
|
||||
|
||||
```bash
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
```
|
||||
|
||||
#### 重启node1
|
||||
#### 5. 重启node1
|
||||
|
||||
在node1进入安装目录(`~/wukongim`)里执行如下命令:
|
||||
|
||||
```bash
|
||||
|
||||
docker-compose restart
|
||||
sudo docker-compose restart
|
||||
|
||||
```
|
||||
|
||||
#### 6. 启动node4
|
||||
|
||||
在`node4`进入安装目录(`~/wukongim`)里执行如下命令:
|
||||
|
||||
```bash
|
||||
|
||||
sudo docker-compose up -d
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 验证
|
||||
|
||||
登录后台管理系统,在节点管理中可以看到新加入的节点的状态是否是已加入状态,如果是则说明扩容成功。
|
||||
|
@ -53,7 +53,7 @@ services:
|
||||
environment:
|
||||
- "WK_MODE=release" # release模式
|
||||
- "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_SERVERADDR=10.206.0.13:11110" # 节点内部通信请求地址
|
||||
- "WK_EXTERNAL_WSADDR=ws://119.45.229.172:15200" # web端访问的ws长连接地址
|
||||
@ -332,7 +332,7 @@ stream {
|
||||
在所有节点下执行如下命令
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
sudo docker-compose up -d
|
||||
```
|
||||
|
||||
|
||||
|
@ -270,7 +270,7 @@ scrape_configs:
|
||||
|
||||
```bash
|
||||
|
||||
docker-compose up -d
|
||||
sudo docker-compose up -d
|
||||
|
||||
```
|
||||
|
||||
@ -278,7 +278,7 @@ docker-compose up -d
|
||||
|
||||
```bash
|
||||
|
||||
docker-compose stop
|
||||
sudo docker-compose stop
|
||||
|
||||
```
|
||||
|
||||
|
@ -18,18 +18,18 @@ version: '3.7'
|
||||
services:
|
||||
...
|
||||
wukongim: # WuKongIM服务
|
||||
image: wukongim/wukongim:2.x.x # 新版本号
|
||||
image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:2.x.x # 新版本号
|
||||
|
||||
```
|
||||
|
||||
使用如下命令获取最新镜像
|
||||
|
||||
```bash
|
||||
docker-compose pull wukongim
|
||||
sudo docker-compose pull wukongim
|
||||
```
|
||||
|
||||
重启
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
sudo docker-compose up -d
|
||||
```
|
@ -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`地址
|
@ -84,9 +84,15 @@ upstream wukongimws {
|
||||
...
|
||||
server 192.168.12.4:5200;
|
||||
}
|
||||
upstream wukongimtcp {
|
||||
...
|
||||
server 192.168.12.4:5100;
|
||||
|
||||
stream {
|
||||
...
|
||||
upstream wukongimtcp {
|
||||
...
|
||||
server 192.168.12.4:5100;
|
||||
}
|
||||
...
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -22,9 +22,9 @@ WuKongIM集群符合 `2n+1` 原则,n表示宕机数量,比如允许1台机
|
||||
|
||||
| 名称 | 内网IP | 外网IP | 角色 |
|
||||
| --- | --- | --- | --- |
|
||||
| node1(1001) | 192.168.12.1 | 222.222.222.1 | 核心节点 |
|
||||
| node2(1002) | 192.168.12.2 | 222.222.222.2 | 常规 |
|
||||
| node3(1003) | 192.168.12.3 | 222.222.222.3 | 常规 |
|
||||
| node1(1001) | 10.206.0.13 | 119.45.229.172 | 核心节点 |
|
||||
| node2(1002) | 10.206.0.14 | 129.211.213.76 | 常规 |
|
||||
| node3(1003) | 10.206.0.8 | 1.13.191.138 | 常规 |
|
||||
|
||||
## 准备工作
|
||||
|
||||
@ -61,155 +61,190 @@ chmod +x wukongim
|
||||
|
||||
#### 配置`WuKongIM`
|
||||
|
||||
在node1上创建配置文件`wk.yaml` 内容如下:
|
||||
在`node1`上创建配置文件`wk.yaml` 内容如下:
|
||||
|
||||
```yaml
|
||||
mode: "release"
|
||||
external: # 公网配置
|
||||
ip: "222.222.222.1" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
ip: "119.45.229.172" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "119.45.229.172:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://119.45.229.172:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
cluster:
|
||||
nodeId: 1001 # 节点id
|
||||
apiUrl: "http://192.168.12.1:5001" # 当前节点内网的api地址
|
||||
serverAddr: "192.168.12.1:11110" # 当前节点内网的分布式通讯地址
|
||||
nodes:
|
||||
- "1001@192.168.12.1:11100"
|
||||
- "1002@192.168.12.2:11100"
|
||||
- "1003@192.168.12.3:11100"
|
||||
apiUrl: "http://10.206.0.13:5001" # 当前节点内网的api地址
|
||||
serverAddr: "10.206.0.13:11110" # 当前节点内网的分布式通讯地址
|
||||
initNodes:
|
||||
- "1001@10.206.0.13:11110"
|
||||
- "1002@10.206.0.14:11110"
|
||||
- "1003@10.206.0.8:11110"
|
||||
```
|
||||
|
||||
|
||||
在node2上创建配置文件`wk.yaml` 内容如下:
|
||||
在`node2`上创建配置文件`wk.yaml` 内容如下:
|
||||
|
||||
```yaml
|
||||
mode: "release"
|
||||
external: # 公网配置
|
||||
ip: "222.222.222.2" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
ip: "129.211.213.76" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "119.45.229.172:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://119.45.229.172:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
cluster:
|
||||
nodeId: 1002 # 节点id
|
||||
apiUrl: "http://192.168.12.2:5001" # 当前节点内网的api地址
|
||||
serverAddr: "192.168.12.2:11110" # 当前节点内网的分布式通讯地址
|
||||
nodes:
|
||||
- "1001@192.168.12.1:11100"
|
||||
- "1002@192.168.12.2:11100"
|
||||
- "1003@192.168.12.3:11100"
|
||||
apiUrl: "http://10.206.0.14:5001" # 当前节点内网的api地址
|
||||
serverAddr: "10.206.0.14:11110" # 当前节点内网的分布式通讯地址
|
||||
initNodes:
|
||||
- "1001@10.206.0.13:11110"
|
||||
- "1002@10.206.0.14:11110"
|
||||
- "1003@10.206.0.8:11110"
|
||||
```
|
||||
|
||||
|
||||
|
||||
在node3上创建配置文件`wk.yaml` 内容如下:
|
||||
在`node3`上创建配置文件`wk.yaml` 内容如下:
|
||||
|
||||
```yaml
|
||||
mode: "release"
|
||||
external: # 公网配置
|
||||
ip: "222.222.222.3" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "222.222.222.1:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://222.222.222.1:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
ip: "1.13.191.138" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
tcpAddr: "129.211.213.76:15100" # app访问的长连接地址, 注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
wsAddr: "ws://129.211.213.76:15200" # web访问的长连接地址,注意这里是负载均衡服务器的ip和端口,不是本机的
|
||||
cluster:
|
||||
nodeId: 1003 # 节点id
|
||||
apiUrl: "http://192.168.12.3:5001" # 当前节点内网的api地址
|
||||
serverAddr: "192.168.12.3:11110" # 当前节点内网的分布式通讯地址
|
||||
nodes:
|
||||
- "1001@192.168.12.1:11100"
|
||||
- "1002@192.168.12.2:11100"
|
||||
- "1003@192.168.12.3:11100"
|
||||
apiUrl: "http://10.206.0.8:5001" # 当前节点内网的api地址
|
||||
serverAddr: "10.206.0.8:11110" # 当前节点内网的分布式通讯地址
|
||||
initNodes:
|
||||
- "1001@10.206.0.13:11110"
|
||||
- "1002@10.206.0.14:11110"
|
||||
- "1003@10.206.0.8:11110"
|
||||
```
|
||||
|
||||
#### 配置`nginx`
|
||||
|
||||
```nginx
|
||||
# api负载均衡
|
||||
upstream wukongimapi {
|
||||
server 192.168.12.1:5001;
|
||||
server 192.168.12.2:5001;
|
||||
server 192.168.12.3:5001;
|
||||
user nginx;
|
||||
worker_processes auto;
|
||||
|
||||
error_log /var/log/nginx/error.log notice;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
# demo负载均衡
|
||||
upstream wukongimdemo {
|
||||
server 192.168.12.1:5172;
|
||||
server 192.168.12.2:5172;
|
||||
server 192.168.12.3:5172;
|
||||
}
|
||||
# manager负载均衡
|
||||
upstream wukongimanager {
|
||||
server 192.168.12.1:5300;
|
||||
server 192.168.12.2:5300;
|
||||
server 192.168.12.3:5300;
|
||||
}
|
||||
# ws负载均衡
|
||||
upstream wukongimws {
|
||||
server 192.168.12.1:5200;
|
||||
server 192.168.12.2:5200;
|
||||
server 192.168.12.3:5200;
|
||||
}
|
||||
# tcp负载均衡
|
||||
upstream wukongimtcp {
|
||||
server 192.168.12.1:5100;
|
||||
server 192.168.12.2:5100;
|
||||
server 192.168.12.3:5100;
|
||||
}
|
||||
# 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://222.222.222.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";
|
||||
http {
|
||||
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 10.206.0.13:5001;
|
||||
server 10.206.0.14:5001;
|
||||
server 10.206.0.8:5001;
|
||||
}
|
||||
# demo负载均衡
|
||||
upstream wukongimdemo {
|
||||
server 10.206.0.13:5172;
|
||||
server 10.206.0.14:5172;
|
||||
server 10.206.0.8:5172;
|
||||
}
|
||||
# manager负载均衡
|
||||
upstream wukongimanager {
|
||||
server 10.206.0.13:5300;
|
||||
server 10.206.0.14:5300;
|
||||
server 10.206.0.8:5300;
|
||||
}
|
||||
# ws负载均衡
|
||||
upstream wukongimws {
|
||||
server 10.206.0.13:5200;
|
||||
server 10.206.0.14:5200;
|
||||
server 10.206.0.8: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://119.45.229.172: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;
|
||||
stream {
|
||||
# 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_timeout 120s;
|
||||
proxy_pass wukongimtcp;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
`记得重启nginx生效`
|
||||
|
||||
## 启动或停止
|
||||
@ -228,15 +263,27 @@ server {
|
||||
|
||||
## 开放端口
|
||||
|
||||
#### 外网开放
|
||||
|
||||
| 端口 | 说明 |
|
||||
| --- | --- |
|
||||
| 15001 | http api 端口 (仅内部局域网开放) |
|
||||
| 15100 | tcp 端口 , app端需要能访问到 |
|
||||
| 15200 | websocket 端口 , web im端需要能访问到 |
|
||||
| 15300 | 后台管理系统的端口, 访问地址: http://127.0.0.1:5300/web |
|
||||
| 15172 | demo的端口,用于演示wukongim通讯能力的demo 访问地址: http://127.0.0.1:15172/login |
|
||||
| 15300 | 后台管理系统的端口|
|
||||
| 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) 。
|
@ -63,91 +63,127 @@ cluster:
|
||||
|
||||
|
||||
## 配置`nginx`
|
||||
|
||||
```nginx
|
||||
# api负载均衡
|
||||
upstream wukongimapi {
|
||||
server 192.168.1.10:5001;
|
||||
server 192.168.1.20:5001;
|
||||
user nginx;
|
||||
worker_processes auto;
|
||||
|
||||
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;
|
||||
server 192.168.1.20:5172;
|
||||
|
||||
|
||||
http {
|
||||
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 {
|
||||
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;
|
||||
}
|
||||
# tcp负载均衡
|
||||
upstream wukongimtcp {
|
||||
|
||||
# tcp
|
||||
stream {
|
||||
# tcp负载均衡
|
||||
upstream wukongimtcp {
|
||||
server 192.168.1.10:5100;
|
||||
server 192.168.1.20:5100;
|
||||
}
|
||||
# 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://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;
|
||||
}
|
||||
server {
|
||||
listen 5100;
|
||||
proxy_connect_timeout 4s;
|
||||
proxy_timeout 120s;
|
||||
proxy_pass wukongimtcp;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## 重启
|
||||
|
@ -40,14 +40,18 @@ chmod +x wukongim
|
||||
|
||||
```yaml
|
||||
mode: "release"
|
||||
rootDir: "./wukongim_data"
|
||||
cluster:
|
||||
nodeId: 1001 # 节点id
|
||||
serverAddr: "xx.xx.xx.xx:11110" # 节点内部通信请求地址
|
||||
external: # 公网配置
|
||||
ip: "" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
ip: "xx.xx.xx.xx" # 节点外网IP,客户端能够访问到的IP地址。
|
||||
```
|
||||
|
||||
`ip修改为服务器的外网IP地址`
|
||||
|
||||
`serverAddr的xx.xx.xx.xx修改为服务器的内网IP地址`
|
||||
|
||||
4. 启动或停止
|
||||
|
||||
``` bash
|
||||
|
@ -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 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复
|
||||
|
||||
#### 本地扩展
|
||||
|
||||
|
@ -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
|
||||
@ -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 后将丢失,远程扩展是服务器保存卸载重装后数据将恢复
|
||||
|
||||
#### 本地扩展
|
||||
|
||||
|
@ -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 万条消息来说大大提高了离线拉取速度。用户点进对应的会话才会去按需拉取这个会话的消息。
|
||||
这些机制 SDK 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化
|
||||
|
||||
@ -605,7 +605,7 @@ cmd 消息由服务端下发客户端解析。
|
||||
|
||||
[什么是频道](/guide/initialize#频道)
|
||||
|
||||
频道是\*\*悟空 IM 里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
|
||||
频道是\*\*WuKongIM 里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
|
||||
|
||||
频道的属性
|
||||
|
||||
@ -1063,7 +1063,7 @@ cmd 消息由服务端下发客户端解析。
|
||||
|
||||
### 消息编辑
|
||||
|
||||
当我们发现发送的消息内容有误后,我们无需撤回后再编辑再发送,**悟空 IM**提供直接在发出去的消息上进行编辑的功能
|
||||
当我们发现发送的消息内容有误后,我们无需撤回后再编辑再发送,**WuKongIM**提供直接在发出去的消息上进行编辑的功能
|
||||
|
||||
<!-- <img src="./edit_before.png" width="250px"> -->
|
||||
<!-- <img src="./edit_after.png" width="250px"> -->
|
||||
|
@ -153,7 +153,7 @@ WKSDK.shared().chatManager.addMessageStatusListener((packet: SendackPacket) => {
|
||||
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
|
||||
@ -297,7 +297,7 @@ class Conversation {
|
||||
|
||||
[什么是频道](/guide/initialize#频道)
|
||||
|
||||
频道是**悟空 IM**里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
|
||||
频道是**WuKongIM**里比较重要的一个抽象概念,发送消息都是先发送给频道,频道根据自己的配置规则进行投递消息,频道分频道和频道详情
|
||||
|
||||
频道的属性
|
||||
|
||||
|
@ -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 内部都已做好了封装,使用者其实不需要关心。使用者只需要关心最近会话的变化
|
||||
|
||||
|
||||
|
||||
|
@ -1,23 +1,23 @@
|
||||
# 集成到自己系统
|
||||
|
||||
`所有悟空IM的接口不要直接给APP端调用,应该前端先调用自己的业务API,业务API再调用悟空IM的API,并且悟空IM的API不要暴露给外网,这样可以保证数据的安全性。`
|
||||
`所有WuKongIM的接口不要直接给APP端调用,应该前端先调用自己的业务API,业务API再调用WuKongIM的API,并且WuKongIM的API不要暴露给外网,这样可以保证数据的安全性。`
|
||||
|
||||
## 第一步:对接自己业务系统的用户
|
||||
|
||||

|
||||
|
||||
1. 您的应用调用自己的登录或注册的业务接口。
|
||||
2. 您的登录或注册的业务接口处理完自己的业务逻辑后将生成的用户 ID(uid)和 token,调用悟空 IM 的[登录或注册用户](/api/user#注册用户)接口更新到悟空 IM
|
||||
2. 您的登录或注册的业务接口处理完自己的业务逻辑后将生成的用户 ID(uid)和 token,调用WuKongIM 的[登录或注册用户](/api/user#注册用户)接口更新到WuKongIM
|
||||
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 接口
|
||||
|
||||
第三方服务提供一个 http api 接口,悟空 IM 将按照 Webhook[(详见文档)](/api/webhook)的约定将对应的数据按照事件的机制传递给此接口。
|
||||
第三方服务提供一个 http api 接口,WuKongIM 将按照 Webhook[(详见文档)](/api/webhook)的约定将对应的数据按照事件的机制传递给此接口。
|
||||
|
||||
## 第三步:配置 Webhook 接口到悟空 IM
|
||||
## 第三步:配置 Webhook 接口到WuKongIM
|
||||
|
||||
将您的 http api 接口配置到**_悟空 IM_**内。
|
||||
将您的 http api 接口配置到**_WuKongIM_**内。
|
||||
|
||||
```yaml
|
||||
---
|
||||
@ -25,4 +25,4 @@ webhook: #
|
||||
httpAddr: 'http://xxxxx' # webhook的http地址 通过此地址通知数据给第三方
|
||||
```
|
||||
|
||||
集成了悟空 IM 的 SDK 的应用的事件将会推送到第三方系统内,比如用户上线后,**_悟空 SDK_**会通知到**_悟空 IM_**端,**_悟空 IM_**将上线事件通过配置的 webhook 地址推送到第三方服务器。
|
||||
集成了WuKongIM 的 SDK 的应用的事件将会推送到第三方系统内,比如用户上线后,**_悟空 SDK_**会通知到**_WuKongIM_**端,**_WuKongIM_**将上线事件通过配置的 webhook 地址推送到第三方服务器。
|
||||
|
@ -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,4 +1,4 @@
|
||||
# 悟空 IM 协议
|
||||
# WuKongIM 协议
|
||||
|
||||
## 控制报文结构
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
## 固定报头
|
||||
|
||||
每个 悟空 IM 控制报文都包含一个固定报头
|
||||
每个 WuKongIM 控制报文都包含一个固定报头
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@ -26,7 +26,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>byte 1</td>
|
||||
<td colspan="4">悟空IM控制报文的类型</td>
|
||||
<td colspan="4">WuKongIM控制报文的类型</td>
|
||||
<td colspan="4">用于指定控制报文类型的标志位</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -35,7 +35,7 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
#### 悟空 IM 控制报文的类型
|
||||
#### WuKongIM 控制报文的类型
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@ -155,9 +155,9 @@ Connack协议中的标志位
|
||||
|
||||
单个字节最大值:01111111,16 进制:0x7F,10 进制为 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 |
|
||||
| ------ | ---------------------------------- | ------------------------------------ |
|
||||
@ -174,7 +174,7 @@ Connack协议中的标志位
|
||||
|
||||
#### 字符串 UTF-8 编码
|
||||
|
||||
有关字符串,悟空 IM 采用的是修改版的 UTF-8 编码,一般形式为如下:
|
||||
有关字符串,WuKongIM 采用的是修改版的 UTF-8 编码,一般形式为如下:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
|
@ -5,7 +5,7 @@ order: 200
|
||||
|
||||
# 频道
|
||||
|
||||
频道是**悟空 IM**里最重要的一个概念,如果还不知道什么是频道请查看[什么是频道?](/guide/initialize#频道)
|
||||
频道是**WuKongIM**里最重要的一个概念,如果还不知道什么是频道请查看[什么是频道?](/guide/initialize#频道)
|
||||
|
||||
## 创建或更新频道
|
||||
|
||||
|
@ -5,11 +5,11 @@ order: 500
|
||||
|
||||
# Datasource
|
||||
|
||||
数据源解决的问题主要是一些现有系统里已有群成员和一些其他数据,需要无缝对接到**悟空 IM**通讯里,那么就可以通过数据源的形式对接
|
||||
数据源解决的问题主要是一些现有系统里已有群成员和一些其他数据,需要无缝对接到**WuKongIM**通讯里,那么就可以通过数据源的形式对接
|
||||
|
||||
`数据源只有在重启后第一次启动时才会加载,如果需要重新加载数据源,需要重启服务`
|
||||
|
||||
**悟空 IM**会调用 datasource 配置的 api 地址,通过 POST 的方式进行请求
|
||||
**WuKongIM**会调用 datasource 配置的 api 地址,通过 POST 的方式进行请求
|
||||
|
||||
请求数据格式如下:
|
||||
|
||||
@ -24,7 +24,7 @@ order: 500
|
||||
|
||||
### 获取订阅者(群成员)
|
||||
|
||||
当**悟空 IM**通讯端需要获取订阅者列表的时候就会调用此 cmd 进行获取
|
||||
当**WuKongIM**通讯端需要获取订阅者列表的时候就会调用此 cmd 进行获取
|
||||
|
||||
请求参数
|
||||
|
||||
|
@ -26,7 +26,7 @@ API 规则:
|
||||
|
||||
## 长连接地址获取
|
||||
|
||||
获取客户端连接**悟空 IM**的地址
|
||||
获取客户端连接**WuKongIM**的地址
|
||||
|
||||
> GET /route?uid=xxxx // uid 为用户 ID
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
|
||||
# API调用时机说明
|
||||
|
||||
所有悟空IM的API应该都由业务后端调用,业务后端再将结果返回给app,不要将悟空IM的API暴露给app。
|
||||
所有WuKongIM的API应该都由业务后端调用,业务后端再将结果返回给app,不要将WuKongIM的API暴露给app。
|
||||
|
||||
## app用户注册/登录时
|
||||
|
||||
业务后端需要调用悟空IM的接口,将用户注册到悟空IM。
|
||||
业务后端需要调用WuKongIM的接口,将用户注册到WuKongIM。
|
||||
|
||||
|
||||
[注册或登录](/server/api/user.html#注册或登录)
|
||||
|
@ -7,7 +7,7 @@ order: 1
|
||||
|
||||
## 注册或登录
|
||||
|
||||
将用户信息注册到悟空 IM,如果存在则更新
|
||||
将用户信息注册到WuKongIM,如果存在则更新
|
||||
|
||||
> POST /user/token
|
||||
|
||||
|
@ -5,7 +5,7 @@ order: 400
|
||||
|
||||
# Webhook
|
||||
|
||||
**悟空 IM**的一些数据将通过 webhook 的形式回调给第三方应用服务,比如用户在线状态,需要推送的消息,所有消息等等,所有 webhook 都是 POST 请求,事件名通过 query 参数传入,
|
||||
**WuKongIM**的一些数据将通过 webhook 的形式回调给第三方应用服务,比如用户在线状态,需要推送的消息,所有消息等等,所有 webhook 都是 POST 请求,事件名通过 query 参数传入,
|
||||
比如 第三方的服务器提供的 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`
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user