一、服务器分布

1、LVS负载均衡

2、多台danmu server

3、Redis(集群)用于存储数据和夸服务器订阅通知

4、Cli server用于读取缓存数据并存到mysql,以及清空缓存

二、弹幕服务端

1、danmu-server使用swoole_websocket_server,中间是子进程,最下面是redis服务器

2、web-server是网页http请求,可以产生的动态推送,并将消息存到redis

3、receive-worker-n是worker进程

3.1、接收用户发出的消息,并存到redis

3.2、在共享内存(data cache进程)标示该房间有新消息

4、data-cache-process是process进程,用于做共享内存,存放roomId、fdId对应关系,房间是否有新消息标示等等

5、monitor-process是process进程

5.1、分析本机共享内存看哪个房间有新消息(对应3.2)

5.2、分析redis看哪个房间有新消息(对应2)

5.3、对有新消息的roomId进行publish

6、send-process-n是process进程

6.1、启动时swoole_redis去subscribe

6.2、onMessage之后读取消息,并遍历发送给房间内的fd

三、data process进程数据交互

1、worker:sendMessage与onPipeMessage

2、process:write与read(写最大8k,读最大64k,自己用pack打包)

四、特殊说明

1、swoole table需要设置行数,且只支持一维,所以自己用process做共享内存

2、onHandshake的时候,还处理了分房间、记录用户信息、刷新新用户列表、进入房间消息等

3、monitor-process除了上面说到的监控新消息,还包含监控直播间回收、监控禁言、监控在线人数等

4、部分功能点通过cli脚本处理,包括redis资源入库及回收等

五、代码段(暂不提供)

1、server.php

2、coroutine.php

3、data_cache.php

4、packet.php

5、pool.php

swoole 弹幕系统的更多相关文章

  1. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结

    8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...

  2. 高并发实时弹幕系统 并发数一定是可以进行控制的 每个需要异步处理开启的 Goroutine(Go 协程)都必须预先创建好固定的个数,如果不提前进行控制,那么 Goroutine 就随时存在爆发的可能。

    小结: 1.内存优化1.一个消息一定只有一块内存使用 Job 聚合消息,Comet 指针引用. 2.一个用户的内存尽量放到栈上内存创建在对应的用户 Goroutine(Go 程)中. 3.内存由自己控 ...

  3. bilibili 高并发实时弹幕系统的实现

    高并发实时弹幕是一种互动的体验.对于互动来说,考虑最多的地方就是:高稳定性.高可用性以及低延迟这三个方面. 高稳定性,为了保证互动的实时性,所以要求连接状态稳定: 高可用性,相当于提供一种备用方案,比 ...

  4. B站弹幕系统架构——GOIM解读

    架构图 说明: 1.logic启动http服务器, 接受http请求,用于将数据推送到kafka以及获取在线用户信息,websocket身份校验 2.comet组件起动webdocket/tcp服务, ...

  5. 使用swoole和websocket结合来制造弹幕

    在知乎上无意中看到了一篇有关这个的话题https://zhuanlan.zhihu.com/p/23992890,刚好没事也好久没弄swoole了就自己按照知乎上的那篇文站实操了一下 那个试验中有几个 ...

  6. swoole学习(二)----搭建server和client

    1.搭建server 1.1搭建server.php 1.搭建websocket服务器,首先建立 server.php 文件, <?php $server = new swoole_websoc ...

  7. Swoole WebSocket 的应用

    目录 概述 代码 小结 概述 这是关于 Swoole 学习的第三篇文章:Swoole WebSocket 的应用. 第二篇:Swoole Task 的应用 第一篇:Swoole Timer 的应用 什 ...

  8. 弹幕文化与HTML5

    分享人:herry 弹幕篇:弹幕文化与HTML5 说说弹幕 弹幕文化 1什么是弹幕? 弹(dàn)幕(mù)在国内兴起已经有个把年了,相信很多朋友都差不多知道弹幕这个东西. 弹幕系统最初的起源是一家日 ...

  9. HTML5 CANVAS 弹幕插件

    概述 修改了普通弹幕运动的算法,新增了部分功能 详细 代码下载:http://www.demodashi.com/demo/10595.html 修改了普通弹幕运动的算法,新增了部分功能,具体请参看附 ...

随机推荐

  1. java 对象比较

    class Book{    private String title ;    private double price ; public Book(String title , double pr ...

  2. ios framework 开发 之 实战 一,合并失败了

    保证public 文件目录独立 在 XCode 7 中,这一条已经自动实现了 Build Settings>Public Headers Folder Path "$(PROJECT_ ...

  3. hdu 1005解题报告

    这道题目n的取值范围很大,1 <= n <= 100,000,000.因此肯定是需要优化才能AC. 首先我考虑到时是有没有通项公式,研究了一下,没发现什么东西,突然看到两个1时就想到会不会 ...

  4. ubuntu 15.10安装搜狗输入法不能打开

    安装Linux是为了更好的做开发,而开发其实不需要输入中文的,然而 在大中国的环境下,电脑没有中文输入法是不行的... 这次装ubuntu 坚持了4天没有中文输入法,我能说,其实没有中文输入法貌似也没 ...

  5. iOS 之 WebView 简单使用

    1. 代理 UIWebViewDelegate 2. 创建 UIWebView myWebView=[[UIWebView alloc] initWithFrame:CGRectMake(, ,sel ...

  6. Zepto.js-事件处理

    http://www.webdevs.cn/article/68.html     web开发网 事件 $.Event $.Event(type, [properties]) ⇒ event 创建并初 ...

  7. Linux目录结构示意详解图

  8. php如何判断是手机访问还是电脑访问

    <?php function isMobile(){ $useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AG ...

  9. JavaWeb学习篇之----HTTP协议详解

    简介: HTTP是hypertexttransfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程. HTTP协 ...

  10. Firebug及YSlow简介与使用图文详解

    Firebug本是Firefox浏览器下一个出色的网页设计插件,随着浏览器的发展,Firebug也推出了支持IE.Opera.Chrome的Firebug Lite.凭借Firebug的出色代码调试功 ...