Skip to content

opensource im with server(go) and client(flutter+swift)

License

Notifications You must be signed in to change notification settings

zihanbobo/CoffeeChat

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CoffeeChat

opensource im with server(go) and client(flutter+swift)

Preview

登录界面
会话界面
设置界面
聊天界面
发起聊天
语音通话-发起
语音通话-来电
语音通话-通话中
语音通话-结束

Features

设计

  • 架构设计:参考瓜子 IM
  • 协议设计:参考网易云 IM、环信、TeamTalk
  • 数据库设计
  • 消息分表存储设计
  • IM 消息 ID 生成设计

单聊群聊

  • flutter 客户端

  • 单聊

  • 多媒体消息:文本

  • 会话列表

  • 消息存储

  • 历史消息

  • 漫游消息(用户切换到任何设备都可以读取到最近的历史消息)

  • 离线消息(用户离线重新上线后收到最近 30 天的未读消息)

  • 多媒体消息:表情

  • 多媒体消息:图片

  • 未读消息计数

  • 消息推送(APNS)

  • 群聊

  • 群最高人数:200

  • 群管理:群主、加人、踢人

  • 群消息免打扰

  • 群成员管理

服务端特有

  • 负载均衡
  • 双机容灾
  • 性能压测 Benchmark
  • 业务监控
  • Redis 集群
  • docker

客户端特有

  • 消息推送提醒(系统通知栏消息提醒)
  • 消息转发
  • 网络连接状态
  • 图片管理器
  • 查找聊天记录
  • 消息同步缓存
  • 会话同步缓存
  • 头像同步缓存
  • 未读计数桌面角标
  • 免打扰模式
  • 图片压缩

特色功能

  • 阅后即焚
  • 撤回
  • 正在输入
  • 已读回执(用户发送消息,获取对方是否已读状态 )
  • 多终端已读同步(同个产品多终端情况下,同步消息已读未读的状态)
  • 端到端加密
  • 高清语音消息
  • 文件上传下载
  • 语音通话
  • 视频通话
  • electron 跨平台桌面客户端
  • flutter 跨平台移动端
  • swift/iOS 客户端+SDK
  • kotlin/Android 客户端+SDK
  • vue/Web 客户端+SDK

客服功能

  • 客服会话
  • 欢迎语
  • 自动分配在线客服
  • 客服正在输入提醒
  • 回头客

智能问答功能

  • AnyQ 百度开源 FAQ 问答系统接入

聊天机器人功能

  • 图灵机器人接入

Architecture

总体架构:总体架构

逻辑架构: 逻辑架构

模块架构: 模块架构

单聊模块交互图: 单聊

See More architecture

Quick Start

Build

PS:请切换到release分支,编译和运行!

client

目前仅支持 Flutter 客户端,在 ios11 模拟器下测试通过。仅测试了登录登出、单聊、发文本、未读消息计数等功能。

  1. Flutter 安装,请参考 官网
  2. 下载 IntelliJ IDEA Ultimate,链接
  3. 使用 idea 打开 cc_flutter_app
  4. 打开终端,初始化项目,命令如下
cd client/cc_flutter_app
flutter pub get
  1. 点击 Open IOS Simulator,等待模拟器启动
  2. 点击 Run 图标

server(以 mac 环境为例)

golang 的包管理工具使用的 dep,相关依赖都已经提交到 github,所以可以直接 build。

  1. golang 环境
brew isntall golang # 安装go
vim ~/.bash_profile # 加入如下配置

export GOROOT=/usr/local/Cellar/go/1.12.5/libexec
export GOPATH="/Users/xuyc/repo/go" # 注意,这里很关键,是你存放代码的路径
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN:$GOROOT/bin

source ~/.bash_profile # 生效
go env # 确认goroot和gopath正确

# git clone 
cd /Users/xuyc/repo/go #注意gopath一定要和上面环境变量对应
mkdir -p src/github.com
cd src/github.com
git clone https://github.com/xmcy0011/CoffeeChat.git
  1. gate 网关服务编译
cd server/src/app/gate
go build
  1. logic 逻辑服务编译
cd server/src/app/logic
go build
  1. [可省略,不影响编译] protobuf(google 开源的协议库,以高压缩率、兼容性等出名,中间文件.proto 结尾,使用 protoc 工具可以生成对应代码源文件)

参考:Mac 下 Go 安装配置并使用 Protobuf

brew install protobuf # 安装
protoc --version # protoc工具,翻译.prot文件为对应的文件

# 安装protobuf的golang插件
go get -u -v github.com/golang/protobuf/proto
go get -u -v github.com/golang/protobuf/protoc-gen-go

# 使用(请跳过该步骤,这里为了演示),把proto翻译成go源文件
# 具体见:pb/build.sh
protoc --go_out=. helloworld.proto

Run

  1. client see here
  2. server see here

Environment

Configuration

Dependencies

Document

  1. 产品介绍
  2. 架构和协议设计
  3. 消息分表存储
  4. IM 消息 ID 生成原理和常见技术难点
  5. 进度计划

Examples

Benchmark

Contact

email:[email protected]

LICENSE

CoffeeChat is provided under the mit license.

About

opensource im with server(go) and client(flutter+swift)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Dart 67.6%
  • Go 30.3%
  • Ruby 1.0%
  • Shell 0.9%
  • Swift 0.1%
  • Kotlin 0.1%