swoole 弹幕系统
一、服务器分布
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 弹幕系统的更多相关文章
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...
- 高并发实时弹幕系统 并发数一定是可以进行控制的 每个需要异步处理开启的 Goroutine(Go 协程)都必须预先创建好固定的个数,如果不提前进行控制,那么 Goroutine 就随时存在爆发的可能。
小结: 1.内存优化1.一个消息一定只有一块内存使用 Job 聚合消息,Comet 指针引用. 2.一个用户的内存尽量放到栈上内存创建在对应的用户 Goroutine(Go 程)中. 3.内存由自己控 ...
- bilibili 高并发实时弹幕系统的实现
高并发实时弹幕是一种互动的体验.对于互动来说,考虑最多的地方就是:高稳定性.高可用性以及低延迟这三个方面. 高稳定性,为了保证互动的实时性,所以要求连接状态稳定: 高可用性,相当于提供一种备用方案,比 ...
- B站弹幕系统架构——GOIM解读
架构图 说明: 1.logic启动http服务器, 接受http请求,用于将数据推送到kafka以及获取在线用户信息,websocket身份校验 2.comet组件起动webdocket/tcp服务, ...
- 使用swoole和websocket结合来制造弹幕
在知乎上无意中看到了一篇有关这个的话题https://zhuanlan.zhihu.com/p/23992890,刚好没事也好久没弄swoole了就自己按照知乎上的那篇文站实操了一下 那个试验中有几个 ...
- swoole学习(二)----搭建server和client
1.搭建server 1.1搭建server.php 1.搭建websocket服务器,首先建立 server.php 文件, <?php $server = new swoole_websoc ...
- Swoole WebSocket 的应用
目录 概述 代码 小结 概述 这是关于 Swoole 学习的第三篇文章:Swoole WebSocket 的应用. 第二篇:Swoole Task 的应用 第一篇:Swoole Timer 的应用 什 ...
- 弹幕文化与HTML5
分享人:herry 弹幕篇:弹幕文化与HTML5 说说弹幕 弹幕文化 1什么是弹幕? 弹(dàn)幕(mù)在国内兴起已经有个把年了,相信很多朋友都差不多知道弹幕这个东西. 弹幕系统最初的起源是一家日 ...
- HTML5 CANVAS 弹幕插件
概述 修改了普通弹幕运动的算法,新增了部分功能 详细 代码下载:http://www.demodashi.com/demo/10595.html 修改了普通弹幕运动的算法,新增了部分功能,具体请参看附 ...
随机推荐
- 简易的AJAX工具[转]
关键字: ajax 1.创建XMLHttpRequest对象的js文件 Ajax.js function Ajax(){ var xmlHttp=null; if(window.XMLHt ...
- DataTable distinct 去重复
有时我们需要从DataTable中抽取Distinct数据,以前总是以对DataTable进行foreach之类纯手工方式获取. 近来发现DataView可以帮我们直接获取Distinct数据,汗一个 ...
- Android px、dp和sp单位区别
[转]http://www.cnblogs.com/bjzhanghao/archive/2012/11/06/2757300.html 在调整布局的时候,某些控件的大小需要设置单位: px: 即像素 ...
- 微软2017MVP大礼包拆箱攻略
容我本周偷个懒,晒个大礼包就糊弄过去了.13号晚上拿到的大礼包,激动的没敢拆,一直等到娃睡着了,才偷偷打开了快递,忍了两天没忍住,上来晒图得瑟一下,请各位轻拍,谢谢! 1.大礼包的盒子(联邦快递的盒子 ...
- MyEclipse 自动换行
打开Eclipse的Window菜单,然后Preferences->Java->Code Style->Formatter->Edit/Show(根据不同版本可用的按钮会不一样 ...
- shell 远程备份日志
#!/bin/bash #Function:自动备份给定列表中的目录或文件,并且可以保留N天备份的档案. #可备份至远程主机指定的目录下,但需本机能免密码登录到远程主机,用到ssh-keygen #该 ...
- apache 做负载
首先说明一下,我感觉这种办法不太好,不能叫负载吧.不知道跳转到的服务器把数据返回给用户,还通不通过Apache的服务器,还有就是不能断点下载了 方法 1.打开httpd.conf 把如下模块前面的# ...
- 高斯RBF核函数中Sigma取值和SVM分离面的影响
1:高斯RBF核函数的定义 k(x) = exp(-x^2/(2×sigma)) 在MATLAB中输入一下代码:ezsurf('exp(-x^2/(2*sigma^2))'); 在GOOGLE中输入“ ...
- Java学习之旅基础知识篇:数据类型及流程控制
经过开篇对Java运行机制及相关环境搭建,本篇主要讨论Java程序开发的基础知识点,我简单的梳理一下.在讲解数据类型之前,我顺便提及一下Java注释:单行注释.多行注释以及文档注释,这里重点强调文档注 ...
- 如何在asp.net页面使用css和js
一.如何在asp.net页面中使用css1.可以直接写在需要样式控制的控件里 例如:<div style="border:#ff6100 1px solid">< ...