discover · compare · collections · requirements · contribute · feed · watching · stats · help with your tokens
Terry-Mao/goim · source
Snapshot 0 · 2026-11-04T12:47:23Z · Go · MIT
Content fingerprint
5553bdff1cfcb4fdbdc60b7bd240a5b7300abf05e601e983a1274bd9af428932GitHub description at capture
goim
README at capture
goim v2.0
==============
[](https://golang.org/)
[](https://github.com/Terry-Mao/goim/actions)
[](https://pkg.go.dev/github.com/Terry-Mao/goim)
[](https://goreportcard.com/report/github.com/Terry-Mao/goim)
goim is an im server writen in golang.
## Features
* Light weight
* High performance
* Pure Golang
* Supports single push, multiple push and broadcasting
* Supports one key to multiple subscribers (Configurable maximum subscribers count)
* Supports heartbeats (Application heartbeats, TCP, KeepAlive, HTTP long pulling)
* Supports authentication (Unauthenticated user can't subscribe)
* Supports multiple protocols (WebSocket,TCP,HTTP)
* Scalable architecture (Unlimited dynamic job and logic modules)
* Asynchronous push notification based on Kafka
## Architecture

## Quick Start
### Build
```
make build
```
### Run
```
make run
make stop
// or
nohup target/logic -conf=target/logic.toml -region=sh -zone=sh001 -deploy.env=dev -weight=10 2>&1 > target/logic.log &
nohup target/comet -conf=target/comet.toml -region=sh -zone=sh001 -deploy.env=dev -weight=10 -addrs=127.0.0.1 2>&1 > target/logic.log &
nohup target/job -conf=target/job.toml -region=sh -zone=sh001 -deploy.env=dev 2>&1 > target/logic.log &
```
### Environment
```
env:
export REGION=sh
export ZONE=sh001
export DEPLOY_ENV=dev
supervisor:
environment=REGION=sh,ZONE=sh001,DEPLOY_ENV=dev
go flag:
-region=sh -zone=sh001 deploy.env=dev
```
### Configuration
You can view the comments in target/comet.toml,logic.toml,job.toml to understand the meaning of the config.
### Dependencies
[Discovery](https://github.com/bilibili/discovery)
[Kafka](https://kafka.apache.org/quickstart)
## Document
[Protocol](./docs/protocol.png)
[English](./README_en.md)
[中文](./README_cn.md)
## Examples
Websocket: [Websocket Client Demo](https://github.com/Terry-Mao/goim/tree/master/examples/javascript)
Android: [Android](https://github.com/roamdy/goim-sdk)
iOS: [iOS](https://github.com/roamdy/goim-oc-sdk)
## Benchmark

### Benchmark Server
| CPU | Memory | OS | Instance |
| :---- | :---- | :---- | :---- |
| Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz | DDR3 32GB | Debian GNU/Linux 8 | 1 |
### Benchmark Case
* Online: 1,000,000
* Duration: 15min
* Push Speed: 40/s (broadcast room)
* Push Message: {"test":1}
* Received calc mode: 1s per times, total 30 times
### Benchmark Resource
* CPU: 2000%~2300%
* Memory: 14GB
* GC Pause: 504ms
* Network: Incoming(450MBit/s), Outgoing(4.39GBit/s)
### Benchmark Result
* Received: 35,900,000/s
[中文](./docs/benchmark_cn.md)
[English](./docs/benchmark_en.md)
## LICENSE
goim is is distributed under the terms of the MIT License.