高性能即时通讯工具-WuKongIM
WuKongIM 介绍
如今信息化时代,即时通讯(IM)已成为我们生活中不可或缺的一部分。无论是个人社交、企业协作,还是物联网设备的通信,都需要一个高效、稳定且安全的通讯解决方案。悟空IM,一个历经10(2015-2025)年积累沉淀的高性能通用通讯服务,正是为满足这些需求而生。它不仅支持即时通讯,还涵盖了站内消息、物联网通讯、音视频信令、直播弹幕、客服系统、AI通讯和即时社区等多种场景,堪称通讯领域的“全能选手”。
系统采用分布式IM重要特性故障自动转移,去中心化设计,节点之间数据互备,支持集群快速自动扩容,代理节点机制
环境要求
go1.20.0或以上环境编译
核心特性
🎯 独特能力
- 无限群成员:支持10万+成员的群聊
- 永久消息存储:消息永久存储,高效检索
- 自定义二进制协议:针对最小带宽使用进行优化
📱 低资源消耗
- 高效协议:1字节心跳包节省带宽和电池
- 优化存储:专为即时通讯工作负载设计的自定义存储引擎
- 智能缓存:智能消息缓存,实现最佳性能
🔐 安全优先
- 端到端加密:消息频道和内容完全加密
- 攻击防护:防止中间人攻击和消息篡改
- 数据备份:实时服务器数据备份确保无数据丢失
🚀 高性能
- 自定义存储:基于 PebbleDB 构建,针对即时通讯进行优化
- 分布式数据库:专用分布式数据库消除通用数据库开销
- 快速存储 = 快速消息:优化的存储层实现高速消息传递
🔥 高可用性
- 改进的 Raft 协议:自定义分布式共识,实现自动灾难恢复
- 零停机时间:节点宕机时自动故障转移,对用户透明
- 去中心化:无单点故障,所有节点独立且平等
- 轻松扩展:无需停机或数据迁移即可添加机器
0️⃣ 易于使用
- 零依赖:无需第三方中间件
- 简单部署:一条命令即可启动
- 基于频道的设计:易于理解的发布-订阅模型
- 开发者友好:全面的文档和 SDK 支持
使用场景
- 聊天应用:群聊、私人消息和社交平台
- 消息推送:通知系统和实时更新
- 物联网通信:设备到设备和设备到服务器的消息传递
- 音视频信令:WebRTC 信令和媒体协调
- 直播:直播的聊天和互动功能
- 客服系统:支持聊天系统和帮助台解决方案
- AI 通信:聊天机器人和 AI 驱动的消息传递
- 即时社区:实时社区平台和论坛
Docker部署
1、单节点模式
1.1、说明
- 适用场景:小型应用,对数据安全要求不高的应用,后续量大可以扩容成集群。
- 优点:部署简单,性能较好,支持在线扩容。
- 缺点:无法容灾,需要手动备份
1.2、环境要求:
- Linux系统(推荐Ubuntu)(推荐配置 2核4G或4核8G)
- 安装Docker (推荐:Docker版本24.0.4或以上)
1.3、安装
- 创建安装目录
mkdir ~/wukongim
- 进入目录
cd ~/wukongim
- 创建docker-compose.yml
version: '3.7'
services:
wukongim: # WuKongIM服务
image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v2
environment:
- "WK_CLUSTER_NODEID=1001"
# - "WK_TOKENAUTHON=true" # 开启token认证,生产环境强烈建议开启
- "WK_CLUSTER_SERVERADDR=xx.xx.xx.xx:11110" # 节点内部通信请求地址
- "WK_TRACE_PROMETHEUSAPIURL=http://prometheus:9090" # prometheus监控地址
- "WK_MODE=release" # release模式
- "WK_EXTERNAL_IP=xxx.xxx.xxx.xxx" # 服务器外网ip
- "WK_CLUSTER_APIURL=http://xx.xxx.xxx.xx:5001" # api的内网地址
- "WK_INTRANET_TCPADDR=xx.xx.xxx.xx:5100" # tcp连接的内网地址,此配置主要用于压测
healthcheck:
test: "wget -q -Y off -O /dev/null http://localhost:5001/health > /dev/null 2>&1"
interval: 10s
timeout: 10s
retries: 3
restart: always
volumes:
- ./wukongim_data:/root/wukongim # 数据挂载到物理机的目录
ports:
- 5001:5001 # http api 端口
- 5100:5100 # tcp端口
- 5200:5200 # websocket端口
- 5300:5300 # 管理端端口
- 5172:5172 # demo端口
- 11110:11110 # 分布式节点通讯端口
prometheus: # 监控服务
image: registry.cn-shanghai.aliyuncs.com/wukongim/prometheus:v2.53.1
volumes:
- "./prometheus.yml:/etc/prometheus/prometheus.yml"
ports:
- "9090:9090"
注意:WK_EXTERNAL_IP xx.xx.xx.xx修改为自己服务器的外网ip地址
WK_CLUSTER_SERVERADDR xx.xx.xx.xx修改为自己服务器的内网ip地址
- 配置prometheus.yml
在安装目录创建prometheus.yml文件,内容如下:
global:
scrape_interval: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: wukongim1-trace-metrics
static_configs:
- targets: ['wukongim:5300']
labels:
id: "1001"
-
启动或停止
启动
sudo docker-compose up -d停止
sudo docker-compose stop -
开放端口
| 端口 | 说明 |
|---|---|
| 5001 | http api 端口 (仅内部局域网开放) |
| 5100 | tcp 端口 , app端需要能访问到 |
| 5200 | websocket 端口 , web im端需要能访问到 |
| 5300 | 后台管理系统的端口, 访问地址: http://xx.xx.xx.xx:5300/web |
| 5172 | demo的端口,用于演示wukongim通讯能力的demo 访问地址: http://xx.xx.xx.xx.1:5172 |
https://docs.githubim.com/zh