范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

swoolewebsocketjs实现分房间弹幕

  1.后端利用php 安装swoole 不会的自行百度 不再赘述
  创建 websocket.php文件 <?php  //创建websocket服务器对象,监听0.0.0.0:9505端口 自行修改端口 $ws = new swoole_websocket_server("192.168.18.15", 9505);   //监听WebSocket连接打开事件 $ws->on("open", function ($ws, $request) {     //var_dump($request->fd, $request->get, $request->server); 	//相当于记录一个日志吧,有连接时间和连接ip //    $roomId = $request->get["roomid"];     echo $request->fd."-----time:".date("Y-m-d H:i:s",$request->server["request_time"])."--IP--".$request->server["remote_addr"]."-----"; //    $ws->push($request->fd, $roomId); });   //监听WebSocket消息事件 $ws->on("message", function ($ws, $frame) {   	//记录收到的消息,可以写到日志文件中     echo "Message: {$frame->data} ";   	//遍历所有连接,循环广播 	foreach($ws->connections as $fd){ 		//如果是某个客户端,自己发的则加上isnew属性,否则不加 		if($frame->fd == $fd){ 			$ws->push($frame->fd, $frame->data.","isnew":"""); 		}else{ 			$ws->push($fd, "{$frame->data}"); 		}     } });   //监听WebSocket连接关闭事件 $ws->on("close", function ($ws, $fd) {     echo "client-{$fd} is closed "; });   $ws->start();
  直接执行 php websocket.php 运行后端websocket服务
  2.前端利用 github大神写的 danmu.js 地址为: https://github.com/chiruom/jquery.danmu.js 内有文档 demo 可以自行研究需要的功能 //WebSocket         var room = GetRequest(); //房间号         var wsServer = "ws://192.168.18.15:9505?roomid=" + room.roomid;         var websocket = new WebSocket(wsServer);           websocket.onopen = function (evt) {             console.log("Connected to WebSocket server.");             /*websocket.send("gaga");*/             //连上之后就打开弹幕             $("#danmu").danmu("danmuResume");         };           websocket.onclose = function (evt) {             console.log("Disconnected");         };           websocket.onmessage = function (evt) {             console.log("Retrieved data from server: " + evt.data);             var time = $("#danmu").data("nowTime") + 1;             var text_obj = evt.data + ","time":" + time + "}";//获取加上当前时间             // console.log(text_obj);             var new_obj = eval("(" + text_obj + ")");             // console.log(new_obj.roomid);             // 判断房间号是否一致展示在该房间             if (new_obj.roomid === room.roomid) {                 $("#danmu").danmu("addDanmu", new_obj);//添加弹幕             }         };           websocket.onerror = function (evt, e) {             console.log("Error occured: " + evt.data);         };             //初始化         $("#danmu").danmu({             left: 0,             top: 0,             height: "100%",             width: "100%",             speed: 7000,             opacity: 1,             font_size_small: 16,             font_size_big: 24,             top_botton_danmu_time: 6000         });           //一个定时器,监视弹幕时间并更新到页面上         function timedCount() {             $("#time").text($("#danmu").data("nowTime"));               t = setTimeout("timedCount()", 50)           }           timedCount();             function starter() {             $("#danmu").danmu("danmuStart");         }           function pauser() {             $("#danmu").danmu("danmuPause");         }           function resumer() {             $("#danmu").danmu("danmuResume");         }           function stoper() {             $("#danmu").danmu("danmuStop");         }           function getime() {             alert($("#danmu").data("nowTime"));         }           function getpaused() {             alert($("#danmu").data("paused"));         }           //发送弹幕,使用了文档README.md第7节中推荐的方法         function send() {             var text = document.getElementById("text").value;             var color = document.getElementById("color").value;             // var position = document.getElementById("position").value;             var position = 0;             //var time = $("#danmu").data("nowTime")+1;             // var size = document.getElementById("text_size").value;             var size = 1;             //var text_obj="{ "text":""+text+"","color":""+color+"","size":""+size+"","position":""+position+"","time":"+time+"}";             //为了处理简单,方便后续加time,和isnew,就先酱紫发一半吧。             //注:time为弹幕出来的时间,isnew为是否加边框,自己发的弹幕,常理上来说是有边框的。             var text_obj = "{ "text":"" + text + "","color":"" + color + "","size":"" + size + "","position":"" + position + "", "roomid":"" + room.roomid + """;             //利用websocket发送             websocket.send(text_obj);             //清空相应的内容             document.getElementById("text").value = "";         }           //调整透明度函数         function op() {             var op = document.getElementById("op").value;             $("#danmu").danmu("setOpacity", op / 100);         }           //调隐藏 显示         function changehide() {             var op = document.getElementById("op").value;             op = op / 100;             if (document.getElementById("ishide").checked) {                 $("#danmu").danmu("setOpacity", 1)             } else {                 $("#danmu").danmu("setOpacity", 0)               }         }           //设置弹幕时间         function settime() {             var t = document.getElementById("set_time").value;             t = parseInt(t)             $("#danmu").danmu("setTime", t);         }           //获取url房间号         function GetRequest(urlStr) {             if (typeof urlStr == "undefined") {                 var url = decodeURI(location.search); //获取url中"?"符后的字符串             } else {                 var url = "?" + urlStr.split("?")[1];             }             var theRequest = new Object();             if (url.indexOf("?") != -1) {                 var str = url.substr(1);                 strs = str.split("&");                 for (var i = 0; i < strs.length; i++) {                     theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);                 }             }             return theRequest;           }
  基础弹幕功能不再多说,说一下分房间弹幕:
  第一种方法,原理js获取到roomid 在通讯时加上 ?roomid=xxx 此时在后端 open方法内可以拿到房间号 $roomId = $request->get["roomid"]; 通过 push 传递给前端进行操作 $ws->push($request->fd, $roomId); 前端拿到房间号进行与当前房间号对比 判断是否为本房间进行弹幕显示。
  第二种方法,直接在前端send时把房间号加上 var xx = "{"xxx": "xxx", "roomid": "roomid"}" ; websocket.send(xx); 此时在后端 message方法内获取到前端data 然后 直接push到前端 ,前端在onmessage方法内拿到后端push的数据进行房间号对比判断,是否为本房间进行弹幕显示。
  两种方法原理都为判断roomid 深入研究可以存放弹幕(redis,系统内存,变量......),判断用户权限,轮播弹幕等,以上代码只为基础代码,有需要的同学可以学习一下。

国内首款量产无人驾驶到底有什么过人之处?最近威马推出了一款全新SUV车威马W6,这辆车除了有过人的外表,他还具备了无人驾驶,做到真正的智能汽车!简单的说下这款威马W6吧,20万级国内首款无人驾驶量产车型,续航有两个版本,8月销量公布,造车新势力座次变更,理想再度卫冕,蔚来掉队日前,造车新势力们纷纷公布了各自8月销量快报,前三巨头可以说变化最大的,就是蔚来汽车,原来一直霸占榜首的,这两个月来销量表现不佳,尤其是8月,直接被哪吒汽车挤到了第四位,理想继续夺赛力斯华为智选SF5完美解决里程忧虑随着新能源汽车的发展,人们纷纷在期待着高性能的新能源汽车出现,赛力斯华为智选SF5诞生之后,新能源汽车终于迎来了新的生机。赛力斯华为智选SF5作为增程式的汽车,和油车以及纯电车的架华为的隐私保护与苹果的拒刷机,手机界的两大痛点华为隐私保护一直走在业界前列。最近荣耀新旗舰机也做到了业界比肩,感到国内高科技企业科技创新历史担当。当前,手机对于我们来说,不仅仅是通讯工具娱乐平台,更是移动办公最佳工具,学习通知华为将推出新手表,复古感十足,仿佛来自中世纪1背景华为智能手表尤其是搭载麒麟芯片的智能手表,一经推出后,就备受消费者青睐。凭借着精致实用,在某东上迅速成为爆款,尽管其价格也不低。当然,销量好的产品,往往容易被聪明的商人抄袭!8月新品盘点三星华为不言,联想小米发声,数量同比上升文焦运杰校对李俊慧团队蓄势待发总在七八月间。暑期档既是销售的黄金期,也是一些新品抢占先机的窗口期。2021年7月,作为暑假的开场,就带给大家不少的惊喜,例如Realme大师版以及华怎么把GMS的软件转到HMS?软件开发者需要付出多大代价?华为HMS4。0正式发布,估计很多开发者都在抉择要不要加入到华为HMS服务中来,但是对国内和国外的开发者来说,他们考虑的点并不相同,海外开发者或者说面向海外发行的APP开发商面临需富瀚微下游市场需求旺盛,上半年迎爆发式增长随着5G物联网消费电子等高新技术的快速发展,带动了专业安防物联网汽车电子等下游应用市场需求旺盛。集成电路产业作为产业链的中上游部分,在旺盛的市场需求推动下,迎来了快速发展时期。近日手机坚持不贴膜,使用一年后,你后悔吗?欢迎在点击右上角关注太平洋电脑网,不定时放送福利哦。我手机没有贴膜,真的没有,买回来之后买了几张钢化膜自己贴,本来想着手艺不错自己弄的。但是贴上之后感觉屏幕素质真的太渣了,而且手感阿里女员工发文被领导性侵,阿里的P7职位属于什么级别的领导?要想知道阿里的P7是什么级别的领导,首先要知道阿里对于岗位级别的设置。在阿里的岗位设置上,分为P岗位,也就是技术岗位以及M岗位,也就是管理岗位。而在阿里的P岗位上,又分为P1一直到为什么用手机自带长焦拍摄效果和外接长焦镜头拍的感觉不一样?众所周知,长焦镜头的体积要比广角镜头大很多。关于这点,不论是单反相机的镜头还是手机镜头都是一样的。很多拥有长焦镜头的手机也都是采用潜望式镜头的方案,其实相当于把镜头做了一个折叠,不
iPhone6iPhone8iPhone11iPhone13拍照对比夜拍差距很明显从iPhone6到iPhone6s,苹果将摄像头像素从800万提升至1200万。经过多年的发展,苹果手机的相机性能不断改进,但1200万像素自2015的iPhone6s以来,到现在乘缺芯东风台积电老对手格罗方德申请美国上市IPO见闻营收仅次于台积电和三星的全球第三大晶圆生产商格罗方德(GlobalFoundries)正试图把握缺芯带来的商机,通过上市圈钱积蓄力量,加快扩张。美东时间4日周一,格罗方德公布递交美35岁成职场荣枯线?各行业年龄门槛重磅出炉,大数据揭秘腾讯京东小米等互联网巨头真实情况数据宝联合腾讯财经推出数看职场,本文从员工年龄角度出发,重点关注互联网等热门行业数据,为您揭秘各行业的年龄门槛。全球知名职场社交平台领英发布的职场人转折点报告显示,职业人生转折点一三星将为其手机配备数字车钥匙三星(Samsung)在GalaxyS21发布期间宣布了在手机中配置数码汽车钥匙的计划,此后,三星终于开始加大对这一功能的支持。三星(Samsung)表示,它对超宽带(UWB)和使昨夜今晨5G消息数字人民币钱包上线传恒大汽车开始半薪轮休2021年10月2日驱动中国昨夜今晨中国移动联手中国工商银行上线5G消息数字人民币钱包快科技报道,近日,中国移动联合中国工商银行共同完成基于5G消息的数字人民币钱包并正式上线。至此天堂为何能藏富于民读懂了阿里最初的梦想,被丁磊称为最舒服的地方,如今是网红圣地因为阿里巴巴,杭州成为电商之都,吸引着更多产业链企业聚于此处。但其实,除了阿里巴巴,除了电商,除了直播网红,这里还有娃哈哈网易海康威视大华股份等巨头,以及大搜车丁香园等独角兽。文中关于加密货币最简单的两点介绍最早的加密货币比特币于2009年推出。今天有数千种加密货币,总价值约2万亿美元。今年早些时候随着价格飙升,造就了数以万计的千万富翁。1。加密货币是可用于支付的真实货币。比特币和以太冲上热搜!女子快递包裹写满侮辱文字!当事人分拣时就发现有字!中通快递无法确定为己方员工所为据新黄河客户端10月3日报道,9月30日,武汉网友张华女士(化名)发微博称,9月10日上午,张华女士在网络电商平台上购买了一款用于按摩肌肉的筋膜枪。9月12日下午收到包裹时,却发现用什么软件可以将文字转成音频读出来?你好,对于目前文字转音频的工具也是非常的多,那么我就给大家推荐几款,适合我们文字转语音的工具,非常方便,非常好用,而且识别率是相当高的第一款,百度开放广播第二款,配音阁第三款,讯飞工信部互联互通是互联网行业的必然选择此前,9月13日,工信部部长肖亚庆在国新办举行的发布会上表示,互联网安全是底线,互联网的发展一定能够使得老百姓的生活更加方便,助力和促进各方面的经济发展,最终促进互联网行业平台经济2021诺贝尔生理学或医学奖揭晓盘点近10年得主及成就中新网10月4日电据诺贝尔奖官网消息,北京时间4日下午,2021年诺贝尔生理学或医学奖揭晓,美国科学家大卫朱利叶斯(DavidJulius)和阿登帕塔普蒂安(ArdemPatapo