php若何完成websocket
起首正在php代码中创立socket效劳并监听端口信息;
//传相应的IP与端口进行创立socket操作 function WebSocket($address,$port){ $server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);//1示意承受一切的数据包 socket_bind($server, $address, $port); socket_listen($server); return $server; }
而后设计一个轮回挂起websocket通道,进行数据的接纳、解决以及发送;
//对创立的socket轮回进行监听,解决数据 function run(){ //死轮回,直到socket断开 while(true){ $changes=$this->sockets; $write=NULL; $except=NULL; /* //这个函数是同时承受多个衔接的要害,我的了解它是为了梗阻顺序持续往下执行。 socket_select ($sockets, $write = NULL, $except = NULL, NULL); $sockets能够了解为一个数组,这个数组中寄存的是文件形容符。当它有变动(就是有新音讯到或许有客户端衔接/断开)时,socket_select函数才会前往,持续往下执行。 $write是监听能否有客户端写数据,传入NULL是没有关怀能否有写变动。 $except是$sockets外面要被扫除的元素,传入NULL是”监听”全副。 最初一个参数是超不时间 假如为0:则立刻完结 假如为n>1: 则最多正在n秒后完结,如遇某一个衔接有新静态,则提前前往 假如为null:如遇某一个衔接有新静态,则前往 */ socket_select($changes,$write,$except,NULL); foreach($changes as $sock){ //假如有新的client衔接出去,则 if($sock==$this->master){ //承受一个socket衔接 $client=socket_accept($this->master); //给新衔接出去的socket一个惟一的ID $key=uniqid(); $this->sockets[]=$client; //将新衔接出去的socket存进衔接池 $this->users[$key]=array( 'socket'=>$client, //记载新衔接出去client的socket信息 'shou'=>false //标记该socket资本不实现握手 ); //不然1.为client断开socket衔接,2.client发送信息 }else{ $len=0; $buffer=''; //读取该socket的信息,留意:第二个参数是援用传参即接纳数据,第三个参数是接纳数据的长度 do{ $l=socket_recv($sock,$buf,1000,0); $len+=$l; $buffer.=$buf; }while($l==1000); //依据socket正在user池外面查找相应的$k,即健ID $k=$this->search($sock); //假如接纳的信息长度小于7,则该client的socket为断开衔接 if($len<7){ //给该client的socket进行断开操作,并正在$this->sockets以及$this->users外面进行删除了 $this->send2($k); continue; } //判别该socket能否曾经握手 if(!$this->users[$k]['shou']){ //假如不握手,则进行握手解决 $this->woshou($k,$buffer); }else{ //走到这里就是该client发送信息了,对承受到的信息进行uncode解决 $buffer = $this->uncode($buffer,$k); if($buffer==false){ continue; } //假如没有为空,则进行音讯推送操作 $this->send($k,$buffer); } } } } }
最初期待客户端进行衔接便可。
var ws = new WebSocket("ws://IP:端口"); //握手监听函数 ws.onopen=function(){ //状态为1证实握手胜利,而后把client自界说的名字发送过来 if(so.readyState==1){ //握手胜利后对效劳器发送信息 so.send('type=add&ming='+n); } } //谬误前往信息函数 ws.onerror = function(){ console.log("error"); }; //监听效劳器端推送的音讯 ws.onmessage = function (msg){ console.log(msg); } //断开WebSocket衔接 ws.onclose = function(){ ws = false; }
保举教程:《PHP教程》《PHP7》
以上就是php若何完成websocket的具体内容,更多请存眷资源魔其它相干文章!
标签: php php教程 WebSocket php故障解决 php使用问题
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!