一、服务器分布

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. 安卓弹出对话框——AlertDialog(二)

    在Android中,启动一个对话框有三种方式: 1.定义一个新的activity,并将其主题设置为对话框风格 2.使用AlertDialog类,并且显示它 3.使用 Android的Dialog类的子 ...

  2. Spring Boot Web Executable Demo

    Spring Boot Web Executable Demo */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.sr ...

  3. UVa 10670 - Work Reduction

    题目大意:对n份文件进行处理使其减少到m份,有l个机构可供选择.每个机构提供两种方案:每减少一份收费a元,或者减少到文件数量的一半收费b元.根据各个机构收取费用进行排序. 很直接的题目,直接进行模拟就 ...

  4. iOS 之 调试、解决BUG

    iOS 解决一个复杂bug 之 计分卡 iOS 调试 之 打印 iOS 错误之 NSObject .CGFloat iOS bug 之 H5 页面没有弹出提示框 iOS 日志工具 CocoaLumbe ...

  5. Java 之 Servlet介绍(Java之负基础实战)

    1.介绍 Servlet是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了 ...

  6. mui中文在线手册及教程文档

    http://dev.dcloud.net.cn/mui/ui/index.html#mask http://ask.dcloud.net.cn/question/2403 http://ask.dc ...

  7. --@angularJS--$scope.watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  8. MySQL XtraBackup自动恢复脚本

      #!/bin/sh ################## #author:rrhelei@126.com# ################## #xtrabackup2.1.8 # 使用方法: ...

  9. oracle11g手工建库

    1.设置环境变量 [oracle@HE3~]$ vi .bash_profile exportPATH exportEDITOR=vi exportORACLE_SID=orcl exportORAC ...

  10. javascript 简单工厂

    function detail() { this.imgArr = []; this.codeArr = []; } detail.prototype.addimg = function(img) { ...