1 Star 0 Fork 3

武林q传 / go-websocket

forked from snowtrace / go-websocket 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

go-websocket

介绍

GO实现千万级WebSocket消息推送服务

软件架构

软件架构说明

技术瓶颈

  • 内核瓶颈

    • 推送量大: 100万在线 * 100条/秒 = 1亿条/秒
    • 内核瓶颈: Linux内核发送TCP的极限包频 ≈ 100万/秒
  • 锁瓶颈

    • 需要维护在线用户长连接集合(100万量级),通常是一个字典结构
    • 推送消息即遍历长连接集合,顺序发送消息,耗时及长
    • 推送期间,客户端仍旧正常上线/下线,所以集合需要上锁
  • CPU瓶颈

    • 浏览器与服务器端通常采取json格式通讯
    • json编码非常耗费CPU资源

技术解决方案

  • 内核瓶颈 - 优化原理(减少网络小包的发送)
    • 将同一秒内的N条消息,合并成1条消息
    • 合并后,每秒推送次数只等于在线连接数
  • 锁瓶颈 - 优化方案
    • 连接打散到多个集合中,每个集合有自己的锁
    • 多线程并发推送多个集合,避免锁竞争
    • 读写锁取代互斥锁,多个推送任务可以并发遍历相同集合
  • CPU瓶颈 - 优化方案
    • json编码前置,1次消息编码 + 100万次推送
    • 消息合并前置,N条消息合并后只编码1次

单机架构

分布式架构

安装教程

git clone https://gitee.com/tinkerfall/go-websocket.git

使用说明

  1. cd go-websocket
  2. make ws && make
  3. ./server

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request

码云特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. 码云官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解码云上的优秀开源项目
  4. GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目
  5. 码云官方提供的使用手册 https://gitee.com/help
  6. 码云封面人物是一档用来展示码云会员风采的栏目 https://gitee.com/gitee-stars/

空文件

简介

GO实现千万级WebSocket消息推送服务 展开 收起
Go
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/php_mysql/go-websocket.git
git@gitee.com:php_mysql/go-websocket.git
php_mysql
go-websocket
go-websocket
master

搜索帮助