GoWind 开源生态GoWind 开源生态
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GitHub
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GitHub
  • GoWind IM

    • GoWind IM 产品介绍
    • /im/installation.html

GoWind IM 产品介绍

GoWind IM 是一个轻量级但功能完整的即时通讯组件,基于 Go 后端和 Vue3 前端构建。支持私聊、群聊、消息推送、在线状态检测、文件传输等实时通讯功能,可独立使用或无缝集成到其他应用中。

一、核心特性

1. 私聊和群聊

  • 一对一私聊:支持加密的端对端通讯
  • 群组聊天:支持创建、管理群组和群内讨论
  • 群组权限:群主、管理员、普通成员等角色管理
  • 频道模式:支持频道式的单向消息广播
  • 分组管理:联系人、群组可分组管理

2. 消息功能

  • 多种消息类型:文本、图片、视频、文件、语音、视频通话等
  • 消息加密:支持 E2E 端对端加密
  • 消息搜索:支持全文搜索历史消息
  • 消息撤回:支持发送后一定时间内撤回消息
  • 消息已读回执:显示单聊和群聊的消息已读状态
  • 消息引用和转发:支持引用和转发消息

3. 在线状态管理

  • 在线状态检测:实时显示用户在线离线状态
  • 自定义状态:支持自定义用户状态信息
  • 最后活跃时间:记录用户最后活跃时间
  • 设备识别:识别用户登录的设备
  • 多设备同步:支持一个账号多设备登录

4. 消息推送

  • 实时通知:Web、App 消息实时推送
  • 离线消息:离线期间的消息缓存和推送
  • 推送配置:支持自定义推送规则和免打扰时段
  • 智能推送:根据用户行为智能决定推送方式
  • 推送分析:推送送达率和用户反馈统计

5. 文件传输

  • 文件上传下载:支持各种格式文件传输
  • 文件转链:生成文件分享链接
  • 文件预览:图片、视频、文档等支持在线预览
  • 断点续传:大文件支持断点续传和秒传
  • 文件过期:自动清理过期文件

6. 音视频通话

  • 语音通话:支持点对点语音通话
  • 视频通话:支持点对点视频通话
  • 群组通话:支持多人音视频会议
  • 屏幕共享:支持屏幕共享展示
  • 通话录制:支持通话录音和录屏

7. 安全性

  • 身份认证:支持 JWT、OAuth 等认证方式
  • 端对端加密:消息加密传输
  • 内容过滤:垃圾信息和敏感词过滤
  • 设备管理:管理登录设备和远程登出
  • 审计日志:记录敏感操作日志

8. 可扩展性

  • 插件系统:支持开发自定义插件
  • Webhook 支持:与第三方系统集成
  • API 开放:完整的 REST API 和 WebSocket API
  • 客户端 SDK:提供多种编程语言的 SDK
  • 自定义字段:支持扩展用户和消息属性

二、应用场景

客服系统

实时客服对话,支持排队、转接、问题分类等。

社交应用

支持私聊、群聊、动态、朋友圈等社交功能。

团队协作

内部团队沟通、项目讨论、日志共享等协作工具。

游戏社交

游戏内玩家沟通、行会聊天、战队语音等。

在线教育

师生沟通、班级讨论、课堂提问等教学辅助。

IoT 通知

设备状态变化通知、告警推送等。

三、技术架构

技术栈

层次技术说明
后端Go 1.18+、Kratos 框架、gRPC高性能、低延迟的实时通讯
前端Vue3、TypeScript、WebSocket、WebRTC现代化 Web 和移动客户端
消息队列Redis / Kafka消息存储和分发
数据库MySQL / PostgreSQL用户、消息等数据存储
缓存Redis在线状态、会话缓存
媒体服务SFU / MCU音视频 P2P 或中继

系统架构

┌──────────────────────────────────┐
│   Web / App 客户端               │
│   (Vue3 / React Native)          │
└──────────────┬───────────────────┘
               │
        ┌──────▼──────────┐
        │  WebSocket/gRPC │
        │    连接层       │
        └──────┬──────────┘
               │
    ┌──────────┼──────────┐
    │          │          │
┌───▼──┐  ┌───▼──┐  ┌───▼──┐
│消息服务 │  │用户服务 │  │通话服务 │
└───┬──┘  └───┬──┘  └───┬──┘
    │         │         │
┌───▼──────────▼─────────▼──┐
│   数据层(MySQL/PG)      │
│   缓存层(Redis)         │
│   消息队列(Kafka/Redis) │
│   媒体服务(SFU/MCU)     │
└──────────────────────────┘

四、核心功能模块

1. 用户管理

用户注册 → 用户登录 → 多设备管理 → 在线状态 → 用户退出
  • 账号注册和登录
  • 多设备支持
  • 在线状态管理
  • 用户资料编辑

2. 联系人管理

  • 添加、删除、封禁联系人
  • 联系人分组
  • 联系人昵称和备注
  • 黑名单管理

3. 消息功能

  • 消息类型:文本、图片、视频、文件、语音
  • 消息状态:发送中、已发送、已送达、已读
  • 消息操作:编辑、撤回、删除、引用、转发
  • 消息搜索和存档

4. 群组管理

群主创建群组 → 邀请成员 → 成员管理 → 群信息修改 → 群解散
  • 创建和解散群组
  • 成员邀请和移除
  • 群组权限管理
  • 群公告和群描述

5. 文件管理

  • 文件上传和下载
  • 文件分享和权限
  • 文件预览
  • 存储空间管理

五、快速开始

1. 在线演示

敬请期待...

2. 环境准备

  • Go 1.18+
  • Node.js 16+
  • MySQL 8.0+ 或 PostgreSQL 12+
  • Redis 6.0+

3. 快速启动

git clone https://github.com/tx7do/go-wind-im.git
cd go-wind-im

# 后端启动
cd backend
make init
gow run im

# 前端启动
cd ../frontend
pnpm install
pnpm dev

4. 访问地址

  • Web UI:http://localhost:3000
  • API 文档:http://localhost:7800/docs/
  • WebSocket:ws://localhost:7800/ws

六、API 概览

用户 API

# 用户注册
POST /api/v1/auth/register
{
  "username": "user1",
  "password": "password123",
  "email": "user@example.com"
}

# 用户登录
POST /api/v1/auth/login
{
  "username": "user1",
  "password": "password123"
}

# 获取用户信息
GET /api/v1/users/{user_id}

# 更新用户信息
PUT /api/v1/users/{user_id}
{
  "nickname": "新昵称",
  "avatar": "头像URL"
}

消息 API

# 发送消息
POST /api/v1/messages
{
  "type": "text",
  "to_user_id": "user2",
  "content": "Hello"
}

# 获取聊天历史
GET /api/v1/messages/{user_id}?page=1&limit=20

# 标记消息已读
PUT /api/v1/messages/{message_id}/read

# 撤回消息
DELETE /api/v1/messages/{message_id}

群组 API

# 创建群组
POST /api/v1/groups
{
  "name": "我的群组",
  "description": "群组描述",
  "members": ["user2", "user3"]
}

# 获取群组信息
GET /api/v1/groups/{group_id}

# 获取群组消息
GET /api/v1/groups/{group_id}/messages

# 添加群成员
POST /api/v1/groups/{group_id}/members
{
  "member_ids": ["user4", "user5"]
}

# 移除群成员
DELETE /api/v1/groups/{group_id}/members/{member_id}

七、WebSocket 消息格式

// 连接 WebSocket
const ws = new WebSocket('ws://localhost:7800/ws?token=your_token');

// 发送消息
ws.send(JSON.stringify({
    type: 'message',
    to_user_id: 'user2',
    content: 'Hello',
    message_type: 'text'
}));

// 接收消息
ws.onmessage = (event) => {
    const message = JSON.parse(event.data);
    console.log('Received:', message);
};

// 消息类型
{
    type: 'message',        // 消息
        type
:
    'status',         // 在线状态
        type
:
    'typing',         // 正在输入
        type
:
    'read',           // 已读回执
        type
:
    'notification'    // 系统通知
}

八、部署指南

Docker 部署

docker build -t gowind-im:latest .
docker run -d \
  -p 7800:7800 \
  -e DATABASE_DSN="your-database-dsn" \
  -e REDIS_ADDR="your-redis-addr" \
  gowind-im:latest

Docker Compose 部署

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: im
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  redis:
    image: redis:7.0
    ports:
      - "6379:6379"

  im:
    build: .
    ports:
      - "7800:7800"
    depends_on:
      - mysql
      - redis
    environment:
      DATABASE_DSN: root:root@tcp(mysql:3306)/im
      REDIS_ADDR: redis:6379

volumes:
  mysql_data:

九、集成 SDK

JavaScript/TypeScript SDK

import {IMClient} from '@gowind/im-sdk';

const client = new IMClient({
    serverUrl: 'ws://localhost:7800',
    userId: 'user1',
    token: 'your_token'
});

// 连接
await client.connect();

// 发送消息
await client.sendMessage({
    to: 'user2',
    type: 'text',
    content: 'Hello'
});

// 接收消息
client.on('message', (message) => {
    console.log('New message:', message);
});

// 断开连接
await client.disconnect();

Go SDK

import "github.com/tx7do/go-wind-im/sdk"

client := sdk.NewClient("ws://localhost:7800", "user1", "token")
err := client.Connect()
if err != nil {
  log.Fatal(err)
}
defer client.Close()

// 发送消息
msg := &sdk.Message{
  To:      "user2",
  Type:    "text",
  Content: "Hello",
}
err = client.SendMessage(msg)

十、常见问题

Q: IM 能支持多少并发用户?

A: 在合理的硬件配置下,单机可支持数万并发连接。通过水平扩展可支持更多用户。

Q: 如何保证消息不丢失?

A: 使用消息队列(Kafka/Redis)持久化,以及数据库存储确保可靠性。

Q: 是否支持消息加密?

A: 支持端对端加密和传输层加密。

Q: 离线消息如何处理?

A: 离线消息缓存在服务器,用户上线后自动同步。

Q: 是否支持群组消息?

A: 完全支持,包括群聊、频道等模式。

Q: 如何实现消息推送通知?

A: 集成第三方推送服务(APNs、FCM、极光等)或自建推送系统。

十一、获取帮助

  • 📖 快速开始指南
  • 📧 邮件:yanglinbo@gmail.com
  • 💬 讨论:GitHub Discussions
  • 🐛 反馈:GitHub Issues

更详细的安装和使用说明,请参考 IM 安装指南。

Edit this page
Last Updated:: 2/28/26, 10:43 PM
Contributors: Bobo
Next
/im/installation.html