一、服务器分布

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. UVa 10033 - Interpreter

    题目大意:模拟题,有一些寄存器和随机访问内存,给你一些指令以及它们代表的操作,模拟操作即可. #include <cstdio> #include <cstring> #def ...

  2. Linux用户和用户组管理总结

    Linux下和用户和用户组管理有关的配置文件: /etc/group Group account information. /etc/gshadow Secure group account info ...

  3. mysql 和excel相互转换

    原文地址:http://blog.sina.com.cn/s/blog_43eb83b90100h0mc.html 今天是全国数学建模比赛,同学选的一个题目需要对一个large的Excel表格进行统计 ...

  4. 【BZOJ1552】[Cerc2007]robotic sort Splay

    [BZOJ1552][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N ...

  5. loading.io一个loading图标网站,跟大家分享

    loading.io是官方网址在首页选一款loading图标,看到左上角的 Try it now中有选中的图标后,可通过光标滑动选择图标大小,然后再点右边的get svg或get css等下载即可

  6. HDU-5086-Revenge of Segment Tree

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5086 这题太不应该了,比赛时没做出来,本来呢,以现在的水平这题是能够做出来的,可就是题目理解错了,按题 ...

  7. HDU-1233-还是畅通工程(并查集)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1233题目很简单(最小生成树) #include<cstdio> #include<io ...

  8. HTML 颜色

    HTML 颜色 HTML 颜色由红色.绿色.蓝色混合而成. 颜色值 HTML 颜色由一个十六进制符号来定义,这个符号由红色.绿色和蓝色的值组成(RGB). 种颜色的最小值是0(十六进制:#00).最大 ...

  9. Mysql密码忘记后如何重设密码

    1. 首先检查mysql服务是否启动,若已启动则先将其停止服务 2. 打开第一个cmd窗口,切换到mysql的bin目录,运行命令: mysqld --defaults-file="C:\P ...

  10. Netty学习笔记

    一些类与方法说明 1)ByteBuf ByteBuf的API说明: Creation of a buffer It is recommended to create a new buffer usin ...