Giter VIP home page Giter VIP logo

go-push's Introduction

go-push

golang实现的、可扩展的通用消息推送原型。

安装

已升级到golang1.13,基于gomod管理依赖。

  • 下载go-push
go get github.com/owenliang/go-push
  • 安装依赖
export GOPROXY=goproxy.io
go mod download
  • 编译gateway服务
cd gateway/cli && go build && cd -
  • 编译logic服务
cd logic/cli && go build && cd -

架构

  • gateway: 长连接网关
    • 海量长连接按BUCKET打散, 减小推送遍历的锁粒度
    • 按广播/房间粒度的消息前置合并, 减少编码CPU损耗, 减少系统网络调用, 巨幅提升吞吐
  • logic: 逻辑服务器
    • 本身无状态, 负责将推送消息分发到所有gateway节点
    • 对调用方暴露HTTP/1接口, 方便业务对接
    • 采用HTTP/2长连接RPC向gateway集群分发消息

潜在问题

  • 推送主要瓶颈是gateway层而不是内部通讯, 所以gateway和logic之间仍旧采用了小包通讯(对网卡有PPS压力), 同时logic为业务提供了批量推送接口来缓解特殊需求.

压测

环境

  • 16 vcore
  • client, logic, gateway deployed together

带宽

bandwidth

CPU占用

cpu usage

logic的推送API

  • 全员广播
curl http://localhost:7799/push/all -d 'items=[{"msg": "hi"},{"msg": "bye"}]'
  • 房间广播
curl http://localhost:7799/push/room -d 'room=default&items=[{"msg": "hi"},{"msg": "bye"}]'

gateway的websocekt协议

  • PING(客户端->服务端)
{"type": "PING", "data": {}}
  • PONG(服务端->客户端)
{"type": "PONG", "data": {}}
  • JOIN(客户端->服务端)
{"type": "JOIN", "data": {"room": "fengtimo"}}
  • LEAVE(客户端->服务端)
{"type": "LEAVE", "data": {"room": "fengtimo"}}
  • PUSH(服务端->客户端)
{"type": "PUSH", "data": {"items": [{"name": "go-push"}, {"age": "1"}]}}

加入社群

我的博客:

鱼儿的博客

Go微信群:

wechat

知识星球(独家知识): xingqiu

go-push's People

Contributors

owenliang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-push's Issues

推送问题

大神你好,请问点对点推送,和qq的私聊,还有踢人,将用户从指定房间里踢出去,这些功能怎么实现

WSConnection的问题:

WSConnection的问题:
readLoop(), writeLoop(), heartbeatChecker(),
这三个方法,按照传统服务端的做法,应该是放在外部,对所有连接统一处理

你的做法是放在WSConnection类,每创建一个WSConnection,都要执行一次,
当有100W用户在线的时候
会有两百W个循环在跑readLoop(), writeLoop()
会有一百W个Timer在检测心跳

是故意这样设计的吗? go的特性?

windows环境下需要注意的问题

1.读取gateway.json和logic.json的路径需要做出修改:
./gateway.json ==>gateway/cli/gateway.json
./logic.josn ==> logic/cli/logic.json
2.gateway.json中读取证书的路径需要作出修改:
./default.pem ==>gateway/cli/default.pem
3.curl 时需注意在windows环境下的写法为:
curl http://localhost:7799/push/all -d "items=[{"msg": "hi"},{"msg": "bye"}]"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.