socket弹幕

xiaoxiao2021-02-28  22

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();    ?>  

转载请注明原文地址: https://www.6miu.com/read-2630095.html

最新回复(0)