html页面
<!DOCTYPE html> <html> <head> <script src="./jquery-1.8.3.js"></script> <meta charset="utf-8"> <title></title> </head> <style type="text/css"> *{ margin: 0; padding: 0; } #navBar{ width: 50%; height: 400px; padding-bottom:40px; border: 1px solid #000; margin: 5% auto 0; position: relative; background: #ccc; } #navBar #video{ width:100%; height:100%; background:#fcfcfc; text-align:center; } #navBar .dm_tool{ width: 100%; height: 40px; background: #ccc; margin-top:1px; bottom: 0; display: flex; } #navBar .dm_tool .dm_con{ width: 89%; height: 38px; outline: none; border: 1px solid #ccc; padding-left: 10px; float: left; } #navBar .dm_tool .sendToDm{ width: 9.7%; background: limegreen; color: white; outline: none; border: 0; cursor:pointer; } #navBar .dmArea{ width:100%; height:400px; top:0; left:0; position:absolute; z-index:10; overflow:hidden; } #navBar .dmArea span{ white-space:nowrap; position:absolute; } </style> <body> <div id="navBar"> <div id="video"><span style="position:absolute;top:45%;left:45%;">假装在播放视频</span></div> <div class="dm_tool"> <input type="text" placeholder="say something..." name="dm_con" class="dm_con" /> <button class="sendToDm">发一弹</button> </div> <div class="dmArea"> <!--span>假装在播放视频 假装在播放视频 </span--> </div> </div> </body> <script type="text/javascript"> var DmClass = { "Dm_H":0, //弹幕区域高度 "Dm_W":0,//弹幕区域宽度 "DmObj":"",//弹幕区对象 //初始化方法 init : function(){ var _this = this; _this.DmObj = $(".dmArea"); _this.Dm_H = _this.DmObj.height(); _this.Dm_W = _this.DmObj.width(); //发送弹幕方法 _this.sendToDmFunc(); }, sendToDmFunc : function(){ var _this = this; $(".sendToDm").click(function(){ var sendCon = $('input[name="dm_con"]').val(); if($.trim(sendCon) == "") { var testList = ["hello world!","你好","视频真好看","吹牛我就服你!!","哈哈哈"]; var _s = Math.floor(Math.random()*5); sendCon = testList[_s]; //return false; } //json 数据格式 var sData = '{"data":"'+sendCon+'"}'; //发送到sockey服务器 SocketClass.websocket.send(sData); }); }, //往弹幕区域添加从服务器广播过来的弹幕数据 addToDm : function(rdata){ var _this = this; //json转对象 var newObj = eval('(' + rdata + ')'); //定义新的弹幕对象 var newDom = $("<span></span>"); //随机取一个位置 var p = _this.randPosition(); //放入弹幕内容 newDom.html(newObj.data); _this.DmObj.append(newDom); //设置初始位置为弹幕区的最右边 newDom.css({"left":_this.Dm_W+"px","top":p+"px"}); //当前单条弹幕位置 var tR = _this.Dm_W; //定时器 20毫秒执行一次 var newTimer = setInterval(function(){ tR -= 2; //当弹幕走出弹幕区将之删除,并清除当前的定时器 if(tR <= -newDom.width()){ newDom.remove(); clearInterval(newTimer); } //新位置 newDom.css("left",tR+"px"); },20); }, //随机获取位置 randPosition : function(){ var _this = this; var rn = Math.floor(Math.random()*(_this.Dm_H - 20)); return rn; }, } //sockey 服务 var SocketClass = { "wsServer":"ws://47.93.20.195:7887", //服务地址 "websocket":"", //socket 对象 init : function(){ var _this = this; //连接docket _this.socketServerInit(); }, socketServerInit : function(){ var _this = this; _this.websocket = new WebSocket(_this.wsServer); //连接上socket _this.websocket.onopen = function (evt) { console.log("Connected to WebSocket server."); }; //socket 服务器关闭 _this.websocket.onclose = function (evt) { alert("socket server closed"); console.log("Disconnected"); }; //接收socket服务器的广播数据 _this.websocket.onmessage = function (evt) { console.log('Retrieved data from server: ' + evt.data); //将接收到的弹幕数据调用addToDm方法 添加到弹幕区域 DmClass.addToDm(evt.data); }; //连接错误 _this.websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data); }; }, } //初始执行方法 $(function(){ DmClass.init(); SocketClass.init(); }); </script>
</html>
php页面
<?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server("0.0.0.0",7887); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { var_dump($request->fd, $request->get, $request->server); $ws->push($request->fd, '{"data":"socket server connected"}'); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { //echo "Message: {$frame->data}\n"; echo "<pre>"; print_r($frame); //遍历所有连接,将接到的消息广播出去 foreach($ws->connections as $fd){ $ws->push($fd, "{$frame->data}"); } //$ws->push($frame->fd, "{$frame->data}"); }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start(); ?>
