Gopusher 是一个支持分布式部署的通用长连接接入层服务,接管客户端连接。Gopusher Comet is a access layer service that handling all client persistent connections with distributed cluster deployment.
你可以很容易的使用 http api 来构建实时聊天,通知推送等应用。You can use http api to develop a instant messaging application or a push notification application easily.
demo: https://chat.yadou.net
这是一个用php开发的聊天应用(源码),采用comet作为长连接接入层,采用php开发聊天的路由和逻辑层部分。
This is a chat application developed in php (code souce), using comet service to handle all client persistent connections, and using php language develop the chat routing and logical layer.
- Wiki: 包含所有的开发文档和API, All Develop Guide And API Wiki.
- QQ交流群: 818628641
- 简单通用
- 多协议支持,websocket 已经支持,tcp 在开发中
- 集群支持
- 开发者友好,采用http api的方式进行rpc调用,便于不同语言的接入开发(你不需要学习golang,只需要运行comet。)
- 支持 docker-compose方式运行 (docker-compose 运行)
- light weight
- multi-protocol support, websocket is already supported, tcp is coming soon
- cluster support
- developer friendly, rpc call using http api to make develop with any program languages easily( You don't need to learn golang, just run comet. )
- Support running with docker (running with docker)
https://golang.org/doc/install
下载项目源码。download comet souce code.
CGO_ENABLED=0 go build -ldflags '-s -w' -o gopusher main.go
mac上编译linux版本, build linux bin file on mac
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags '-s -w' -o gopusher-for-linux main.go
Edit
vim config.yaml
app_name: gateway
app_debug: true
logging:
level: warn
log_file: ""
api_server:
address: 0.0.0.0:8080
token: "token"
redis:
default:
addr: 127.0.0.1:6379
password: ""
db: 0
dingtalk:
default:
token: "xx"
secret: "yy"
node: gateway-01
server.websocket:
app_key: "app_key_1"
app_secret: "app_secret_1"
address: :8900
ssl: false
ssl_cert_file: ""
ssl_key_file: ""
client_id_alias: "client_id"
token_alias: "token"
time_alias: "time"
time_window: 5
- Run Gopusher
./gopusher start -c config.yaml
到现在为止,你已经可以使用gopusher了,并采用你喜欢的语言进行接入开发你的长连接应用了。So far, you can already use gopusher service and develop your persistent connections application with your favorite program language.
-
Build docker image
docker build -t gopusher .
-
Run
docker run --rm -it -v $(pwd)/config.yaml:/app/config.yaml --net=host gopusher gopusher start
如果你需要采用集群的方式运行,你可以采用nginx等来做负载均衡。If you need to run comet cluster, you can use nginx, etc. for load balancing.
upstream websocket {
server 192.168.3.165:8900 weight=1;
server 192.168.3.165:8902 weight=1;
}
server {
listen 8910;
server_name www.chat.com$;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
你也可以采用服务器下发 gopusher ip port 的方式来进行负载均衡,you can also use the method of sending the gopusher ip port to load balance.
Words 'chat' and 'instant messaging' in Chinese, Russian, Persian and a few other languages.
- 聊天室 即時通訊
- чат мессенджер
- インスタントメッセージ
- 인스턴트 메신저
- پیامرسانی فوری گپ
- تراسل فوري
- Nhắn tin tức thời
- Mensageiro instantâneo
- Pesan instan
- 增加 prometheus 的支持,如 当前所有在线连接数 等指标
- 增加etcd服务注册
- 增加grpc的支持
- 采用bucket分段锁方式优化群聊的广播
- 增加服务运行状态接口:协程数,内存占用,当前连接数,服务运行开始时间,已经处理消息数等