All Projects → oikomi → Fishchatserver2

oikomi / Fishchatserver2

Licence: mit
FishChatServer2

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Fishchatserver2

ios
Connect IM iOS Project
Stars: ✭ 13 (-97.36%)
Mutual labels:  im
Candy
新一代IM
Stars: ✭ 289 (-41.38%)
Mutual labels:  im
Pc Chat
Open source IM solution.
Stars: ✭ 362 (-26.57%)
Mutual labels:  im
xcloud-dopaas
One stop solution of PaaS platform based on DevSecOps --- Based on SpringCloud/Docker/k8s/ServiceMesh(Istio), primary integrated modules: CMDB, Unified Continuous delivery of CI/CD (distributed compilation and deployment), IAM Certification Center, Unified monitoring center, Unified configuration center, Unified Distributed task scheduling cente…
Stars: ✭ 76 (-84.58%)
Mutual labels:  im
Starrtc Android Demo
🚀starRTC,即时通讯(IM)系统,免费IM系统(含单聊,群聊,聊天室,文件传输),免费一对一视频聊天,VOIP,语音对讲(回音消除),直播连麦,视频直播,RTSP拉流,RTMP推流,webRTC服务端,在线教育,白板,小班课,在线会议,视频会议,视频监控,局域网直连(无需服务器),兼容webRTC, 支持webRTC加速,P2P高清传输,安卓、iOS、web互通,支持门禁对讲,可视对讲,电视盒子,树莓派,海思,全志,任天堂switch,云游戏,OTT设备,物联网平台,C语言自研方案,支持二次开发成类微信,类映客等APP,✨万水千山总是情,来个star行不行✨,更多示例请访问:
Stars: ✭ 3,038 (+516.23%)
Mutual labels:  im
Oim Fx
OIM是采用 Java平台开发的一套即时通讯聊天系统,献给对即时通讯有兴趣的朋友。服务端实现了TCP Socket和WebSocket。方便接入网页版、安卓、IOS、PC桌面版客户端。OIM已经实现桌面版客户端,可以跨平台Windows、mac、Linux使用,用于公司内网、外网通讯、客服系统等,聊天系统。OIM项目可用于任何商业、个人作品中并且希望能够保留作者信息。如果OIM能够帮助到您,请点赞好评,加个星
Stars: ✭ 324 (-34.28%)
Mutual labels:  im
fire-im
分布式IM服务,参考https://github.com/crossoverJie/cim 实现
Stars: ✭ 17 (-96.55%)
Mutual labels:  im
Im
纯go实现的分布式im即时通讯系统,各层可单独部署,之间通过rpc通讯
Stars: ✭ 418 (-15.21%)
Mutual labels:  im
Hrlchatui
android自定义聊天界面 支持语音 图片 视频 文件布局的显示
Stars: ✭ 273 (-44.62%)
Mutual labels:  im
Mobileimsdk
一个原创移动端IM通信层框架,轻量级、高度提炼,历经8年、久经考验。可能是市面上唯一同时支持UDP+TCP+WebSocket三种协议的同类开源框架,支持iOS、Android、Java、H5,服务端基于Netty。
Stars: ✭ 3,864 (+683.77%)
Mutual labels:  im
vscode-qq
基于安卓QQ协议的vscode-qq扩展
Stars: ✭ 588 (+19.27%)
Mutual labels:  im
BBBUG Frontend
一个支持多房间的点歌听歌聊天室PC网站,实现了类KTV的点歌、顶歌、切歌,也可以自己听自己的歌,做一个自己的音乐播放器。
Stars: ✭ 114 (-76.88%)
Mutual labels:  im
React Native Chat Demo
网易云信IM示例
Stars: ✭ 325 (-34.08%)
Mutual labels:  im
electronim
Electron based multi IM (Instant Messaging) client
Stars: ✭ 50 (-89.86%)
Mutual labels:  im
Im
仿QQ即时通讯系统服务端
Stars: ✭ 369 (-25.15%)
Mutual labels:  im
CimIM
IM即时通信Android客户端
Stars: ✭ 14 (-97.16%)
Mutual labels:  im
Im Select
Switch your input method through terminal 📟
Stars: ✭ 288 (-41.58%)
Mutual labels:  im
Im
IM server based on netty. Provides a client jar. Integrate with your own login system.基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统
Stars: ✭ 490 (-0.61%)
Mutual labels:  im
Rabbitim
玉兔即时通讯。开源的跨平台的的即时通信系统。包括文本、音视频、白板、远程控制
Stars: ✭ 386 (-21.7%)
Mutual labels:  im
Mpush
MPush开源实时消息推送系统
Stars: ✭ 3,455 (+600.81%)
Mutual labels:  im

FishChatServer2

Build Status Go Report Card

目录

1说明

吸取了第一版的经验以及我们商业版的探索. 第二版我更多的思考在不要过多的实现轮子, 这个版本将很多业务无关的代码去掉, 并且尽量靠拢微服务. 部署方式可以支持:

  • 普通部署
  • 容器部署 (Kubernetes + Docker)

2特性

⬆ 回到顶部

3架构

3.1聊天设计方案

这里简单陈述一下消息的设计思路, 如下

其中:

1 消息是通过版本号维护的, 是一个递增的int64整数, 由idgen提供服务, 每个用户都有一个独立的自增id

2 新消息到达, 服务端只负责发送给客户端一个轻量级的notify通知

3 客户端收到notify后, 发起同步请求

3.2存储方案

其中最关键的是HBase存储, 所有的消息通过Kafka消费后将插入HBase中, 消息存储的时候会带上递增的版本号. 这样客户端带上一个版本号来请求消息的时候, 将只返回大于此版本号的消息列表.

⬆ 回到顶部

4协议

protocol目录下

  • external 是对外的协议,采用protobuf实现
  • rpc 是服务内部的调用,采用grpc

⬆ 回到顶部

5数据模型

doc/db目录下

⬆ 回到顶部

6服务说明

进入server目录下

access
gateway
logic
manager
notify
register

⬆ 回到顶部

7依赖

7.1系统环境

golang >= 1.4
jdk >= 1.8 (数据处理很多服务用java编写)
go get -u -d github.com/golang/glog
go get -u -d github.com/coreos/etcd
go get -u -d github.com/Shopify/sarama
go get -u -d github.com/wvanbergen/kafka/consumergroup
go get -u -d github.com/tsuna/gohbase
go get -u -d github.com/garyburd/redigo/redis
go get -u -d github.com/BurntSushi/toml
go get -u -d gopkg.in/olivere/elastic.v5
go get -u -d gopkg.in/mgo.v2
go get -u -d github.com/go-sql-driver/mysql
go get -u -d github.com/satori/go.uuid

7.2第三方依赖

etcd 3.0以上版本
redis 
Mysql
kafka
HBase
ElasticSearch(可选)

⬆ 回到顶部

8部署

8.1普通部署

为了方便, 我们在单机上进行部署 (实际部署的时候, 每个服务角色都可以自由水平扩展)

8.1.1依赖安装

安装完成之后创建两个topic:

p2p topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic logic_producer_p2p

group topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic logic_producer_group

  • HBase安装 :

安装完成之后创建:

create 'im', 'user', 'msg'
  • redis安装 : 采用默认安装即可

  • mysql安装 : 采用默认安装即可

  • etcd安装 : 需要3.0以上版本, 采用默认安装即可

8.1.2server安装

进入server下面的各个目录 运行 go build, 然后启动服务即可(因为服务做了服务发现, 所以对启动顺序没有要求), 这里为了简单, 每个服务我们只启动一个, 当然启动任意个都是支持的.

  • gateway安装
➜  FishChatServer2 git:(master)cd server/gateway 
➜  gateway git:(master) ✗ go build
➜  gateway git:(master) ✗ ./gateway 
  • access安装
➜  FishChatServer2 git:(master)cd server/access 
➜  access git:(master) ✗ go build
➜  access git:(master) ✗ ./access 
  • logic安装
➜  FishChatServer2 git:(master)cd server/logic 
➜  logic git:(master) ✗ go build
➜  logic git:(master) ✗ ./logic 
  • register安装
➜  FishChatServer2 git:(master)cd server/register 
➜  register git:(master) ✗ go build
➜  register git:(master) ✗ ./register 
  • notify安装
➜  FishChatServer2 git:(master)cd server/notify
➜  notify git:(master) ✗ go build
➜  notify git:(master) ✗ ./notify
  • manager安装
➜  FishChatServer2 git:(master)cd server/manager 
➜  manager git:(master) ✗ go build
➜  manager git:(master) ✗ ./manager 

8.1.3job安装

  • msg-job安装(Java)
➜  FishChatServer2 git:(master)cd jobs/msg-job
➜  msg-job git:(master) ✗ mvn clean package  -Dmaven.test.skip=true
➜  msg-job git:(master) ✗ java -jar  msg-job-core/target/msg-job-core-1.0-SNAPSHOT.jar

8.1.4中间件服务安装

  • idgen安装
➜  FishChatServer2 git:(master)cd service/idgen 
➜  idgen git:(master) ✗ go build
➜  idgen git:(master) ✗ ./idgen 

8.2容器部署

部署完全采用Kubernetes + Docker

所以第一步需要搭建KubernetesDocker, 幸运的是现在网络上已经有大量的资料了, 这块我就不多写了.

⬆ 回到顶部

9测试

9.1点对点聊天测试

进入client/p2p目录, 用户可以启动两个以上的进程, 两两之间互相聊天

➜  FishChatServer2 git:(master)cd client/p2p 
➜  p2p git:(master) ✗ go build
➜  p2p git:(master) ✗ ./p2p 
输入我的id :321
输入对方的id :收到点对点消息: 返回码[0], 对方ID[321], 消息内容[hello]

9.2群聊测试

⬆ 回到顶部

10监控

⬆ 回到顶部

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].