亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php實現websocket實時消息推送

2024-05-05 00:02:57
字體:
來源:轉載
供稿:網友

php實現websocket實時消息推送,供大家參考,具體內容如下

php,websocket,消息推送

SocketService.php

<?php/** * Created by xwx * Date: 2017/10/18 * Time: 14:33 */class SocketService{  private $address = '0.0.0.0';  private $port = 8083;  private $_sockets;  public function __construct($address = '', $port='')  {      if(!empty($address)){        $this->address = $address;      }      if(!empty($port)) {        $this->port = $port;      }  }  public function service(){    //獲取tcp協議號碼。    $tcp = getprotobyname("tcp");    $sock = socket_create(AF_INET, SOCK_STREAM, $tcp);    socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);    if($sock < 0)    {      throw new Exception("failed to create socket: ".socket_strerror($sock)."/n");    }    socket_bind($sock, $this->address, $this->port);    socket_listen($sock, $this->port);    echo "listen on $this->address $this->port ... /n";    $this->_sockets = $sock;  }  public function run(){    $this->service();    $clients[] = $this->_sockets;    while (true){      $changes = $clients;      $write = NULL;      $except = NULL;      socket_select($changes, $write, $except, NULL);      foreach ($changes as $key => $_sock){        if($this->_sockets == $_sock){ //判斷是不是新接入的socket          if(($newClient = socket_accept($_sock)) === false){            die('failed to accept socket: '.socket_strerror($_sock)."/n");          }          $line = trim(socket_read($newClient, 1024));          $this->handshaking($newClient, $line);          //獲取client ip          socket_getpeername ($newClient, $ip);          $clients[$ip] = $newClient;          echo "Client ip:{$ip}  /n";          echo "Client msg:{$line} /n";        } else {          socket_recv($_sock, $buffer, 2048, 0);          $msg = $this->message($buffer);          //在這里業務代碼          echo "{$key} clinet msg:",$msg,"/n";          fwrite(STDOUT, 'Please input a argument:');          $response = trim(fgets(STDIN));          $this->send($_sock, $response);          echo "{$key} response to Client:".$response,"/n";        }      }    }  }  /**   * 握手處理   * @param $newClient socket   * @return int 接收到的信息   */  public function handshaking($newClient, $line){    $headers = array();    $lines = preg_split("//r/n/", $line);    foreach($lines as $line)    {      $line = chop($line);      if(preg_match('//A(/S+): (.*)/z/', $line, $matches))      {        $headers[$matches[1]] = $matches[2];      }    }    $secKey = $headers['Sec-WebSocket-Key'];    $secAccept = base64_encode(pack('H*', sha1($secKey . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')));    $upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake/r/n" .      "Upgrade: websocket/r/n" .      "Connection: Upgrade/r/n" .      "WebSocket-Origin: $this->address/r/n" .      "WebSocket-Location: ws://$this->address:$this->port/websocket/websocket/r/n".      "Sec-WebSocket-Accept:$secAccept/r/n/r/n";    return socket_write($newClient, $upgrade, strlen($upgrade));  }  /**   * 解析接收數據   * @param $buffer   * @return null|string   */  public function message($buffer){    $len = $masks = $data = $decoded = null;    $len = ord($buffer[1]) & 127;    if ($len === 126) {      $masks = substr($buffer, 4, 4);      $data = substr($buffer, 8);    } else if ($len === 127) {      $masks = substr($buffer, 10, 4);      $data = substr($buffer, 14);    } else {      $masks = substr($buffer, 2, 4);      $data = substr($buffer, 6);    }    for ($index = 0; $index < strlen($data); $index++) {      $decoded .= $data[$index] ^ $masks[$index % 4];    }    return $decoded;  }  /**   * 發送數據   * @param $newClinet 新接入的socket   * @param $msg  要發送的數據   * @return int|string   */  public function send($newClinet, $msg){    $msg = $this->frame($msg);    socket_write($newClinet, $msg, strlen($msg));  }  public function frame($s) {    $a = str_split($s, 125);    if (count($a) == 1) {      return "/x81" . chr(strlen($a[0])) . $a[0];    }    $ns = "";    foreach ($a as $o) {      $ns .= "/x81" . chr(strlen($o)) . $o;    }    return $ns;  }  /**   * 關閉socket   */  public function close(){    return socket_close($this->_sockets);  }}$sock = new SocketService();$sock->run();

web.html

 

<!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1, maximum-scale=1, user-scalable=no"> <title>websocket</title> </head> <body> <input id="text" value=""> <input type="submit" value="send" onclick="start()"> <input type="submit" value="close" onclick="close()"><div id="msg"></div> <script> /** 0:未連接1:連接成功,可通訊2:正在關閉3:連接已關閉或無法打開*/  //創建一個webSocket 實例  var webSocket = new WebSocket("ws://192.168.31.152:8083");  webSocket.onerror = function (event){    onError(event);  };  // 打開websocket  webSocket.onopen = function (event){    onOpen(event);  };  //監聽消息  webSocket.onmessage = function (event){    onMessage(event);  };  webSocket.onclose = function (event){    onClose(event);  }  //關閉監聽websocket  function onError(event){    document.getElementById("msg").innerHTML = "<p>close</p>";    console.log("error"+event.data);  };  function onOpen(event){    console.log("open:"+sockState());    document.getElementById("msg").innerHTML = "<p>Connect to Service</p>";  };  function onMessage(event){    console.log("onMessage");    document.getElementById("msg").innerHTML += "<p>response:"+event.data+"</p>"  };  function onClose(event){    document.getElementById("msg").innerHTML = "<p>close</p>";    console.log("close:"+sockState());    webSocket.close();  }  function sockState(){    var status = ['未連接','連接成功,可通訊','正在關閉','連接已關閉或無法打開'];      return status[webSocket.readyState];  } function start(event){    console.log(webSocket);    var msg = document.getElementById('text').value;    document.getElementById('text').value = '';    console.log("send:"+sockState());    console.log("msg="+msg);    webSocket.send("msg="+msg);    document.getElementById("msg").innerHTML += "<p>request"+msg+"</p>"  };  function close(event){    webSocket.close();  } </script> </body></html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人a成www在线影院| 久久久久久亚洲精品| 精品成人乱色一区二区| 热99精品里视频精品| 欧美激情欧美激情在线五月| 亚洲一区二区三区成人在线视频精品| 69久久夜色精品国产69乱青草| 久久国内精品一国内精品| 亚洲一区二区在线| 亚洲免费中文字幕| 亚洲国语精品自产拍在线观看| 91网站免费观看| 国产精品一区二区久久国产| 中文字幕国内精品| 欧美高清性猛交| 国产欧美日韩亚洲精品| 久久久久久久爱| 91精品久久久久久久久久久久久久| 欧美日韩美女在线| 日韩电影视频免费| 久久精视频免费在线久久完整在线看| 久久91亚洲精品中文字幕| 久久频这里精品99香蕉| 亚洲国产欧美一区二区三区久久| 成人做爰www免费看视频网站| 亚洲天堂av在线免费| www.久久久久久.com| 久久夜色精品国产欧美乱| 国产精品免费一区二区三区都可以| 国产精品视频资源| 久久天天躁日日躁| 欧美成人精品不卡视频在线观看| 成人激情电影一区二区| 日韩黄在线观看| 欧美亚洲一区在线| 精品久久中文字幕| 久久久久久久97| 欧美一级在线播放| 亚洲国产精品一区二区三区| 高清日韩电视剧大全免费播放在线观看| 国产精品欧美日韩久久| 尤物99国产成人精品视频| 欧美性猛交xxxx乱大交3| 国产一区二区三区丝袜| 91精品视频在线| 国产日韩一区在线| 992tv在线成人免费观看| 九九九热精品免费视频观看网站| 久久人人爽人人爽人人片av高清| 欧美成年人视频网站欧美| 精品久久香蕉国产线看观看gif| 亚洲一区二区少妇| 亚洲精品av在线| 亚洲人成电影在线| 国产在线视频一区| 久久国产精品影片| www.欧美精品一二三区| 另类视频在线观看| 欧美日韩中文字幕| 国产精品久久久久7777婷婷| 国产一区二区久久精品| 欧美黄色片免费观看| 这里只有精品在线播放| 欧美极品少妇xxxxx| 亚洲自拍偷拍区| 日韩成人免费视频| 亚洲自拍偷拍区| 亚洲一区二区免费| 精品久久香蕉国产线看观看gif| 日韩精品中文字幕久久臀| 91精品国产精品| 久久久久久免费精品| 日韩大陆欧美高清视频区| 国产成人精品久久二区二区91| 久久久久久久久久久国产| 欧美黑人极品猛少妇色xxxxx| 久热精品视频在线观看| 日韩天堂在线视频| 日韩欧美综合在线视频| 国产成人在线一区| 全亚洲最色的网站在线观看| 国产精品流白浆视频| 亚洲午夜久久久久久久| 国产精品亚洲激情| 日韩精品视频在线| 精品成人乱色一区二区| 国产精品91一区| 成人两性免费视频| 色偷偷综合社区| 欧美三级欧美成人高清www| 综合国产在线观看| 日韩av在线免费观看| 欧美精品一区三区| 国产精品美女久久久久av超清| 青青草原成人在线视频| 日韩一区二区欧美| 国产精品久久久久久久久久久久久久| 国产精品久久久久久久7电影| 午夜精品视频网站| 久久69精品久久久久久国产越南| 亚洲tv在线观看| 欧美性高潮床叫视频| 国产精品综合不卡av| 中文字幕亚洲一区二区三区| 精品久久久久久久久久ntr影视| 久久久在线视频| 午夜美女久久久久爽久久| 亚洲男人的天堂在线播放| 大桥未久av一区二区三区| 91久久嫩草影院一区二区| 国语自产精品视频在线看一大j8| 亚洲一区二区自拍| 日韩欧美中文第一页| 欧美一级片免费在线| 欧美日韩国产黄| 久久精品亚洲国产| 国产69精品久久久久99| 九九精品在线播放| 国产精品日韩在线一区| 日韩美女免费视频| 欧美激情va永久在线播放| 欧美成aaa人片在线观看蜜臀| 欧美性开放视频| 国产精品电影一区| 国产日韩精品在线播放| 亚洲欧美中文日韩在线v日本| 一本一本久久a久久精品综合小说| 91精品久久久久久久久中文字幕| 97色在线观看免费视频| 日韩亚洲精品视频| 成人欧美在线视频| 亚洲国产高清自拍| 在线观看国产精品淫| 亚洲欧美国产精品| 77777少妇光屁股久久一区| 亚洲精品一区二区久| 91精品国产一区| 成人激情视频小说免费下载| 亚洲午夜精品久久久久久久久久久久| 一本大道久久加勒比香蕉| 一个色综合导航| 日韩视频第一页| 久久久久久久91| 欧美在线观看网址综合| 在线观看国产精品日韩av| 国产精品久久久久久久久久小说| 国产精品久久久久久久久免费看| 91人人爽人人爽人人精88v| 清纯唯美亚洲激情| 色999日韩欧美国产| 成人h片在线播放免费网站| 亚洲黄色成人网| 国产成人精品电影久久久| 国产一区二区三区免费视频| 成人福利在线视频| 最近2019中文字幕大全第二页| 欧美床上激情在线观看| 97成人在线视频| 日韩精品在线私人| 91麻豆桃色免费看| 欧美黄色三级网站| 亚洲精品乱码久久久久久按摩观| 欧美电影在线观看完整版| 亚洲国产精品va|