php select socket
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                php select socket
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                因為客戶端是長連接,如果客戶端非正常斷開,服務端會在socket_accept阻塞,現在使用select非阻塞模式socket,讀取客戶端信息。
1 <?php 2 date_default_timezone_set("Asia/Shanghai"); 3 include_once "Db.php"; 4 $sfd = socket_create(AF_INET, SOCK_STREAM, 0); 5 socket_bind($sfd, "192.168.191.1", 9001); 6 socket_listen($sfd, 10); //監聽10個 7 socket_set_option($sfd, SOL_SOCKET, SO_REUSEADDR, 1); //重用端口 8 socket_set_nonblock($sfd); //非阻塞 9 $rfds = array($sfd); 10 $wfds = array(); 11 do{ 12 $rs = $rfds; 13 $ws = $wfds; 14 $es = array(); 15 $ret = socket_select($rs, $ws, $es, 3); 16 //read event 17 foreach($rs as $fd){ 18 19 if($fd == $sfd){ 20 $cfd = socket_accept($sfd); 21 socket_set_nonblock($cfd); 22 $rfds[] = $cfd; 23 echo "new client coming, fd=$cfd\n"; 24 }else{ 25 //獲取客戶端IP地址 26 socket_getpeername($fd, $addr, $port); 27 //讀取客戶端信息 28 $msg = socket_read($fd, 1024); 29 echo date("H:i:s")." $fd $msg"; 30 $arr=explode(",", $msg); 31 //更新到數據庫 32 $sql = "update test set wendu = $arr[0],shidu = $arr[1], green = $arr[2],yellow=$arr[3] ,red=$arr[4],dianliu=$arr[5],dianya=$arr[6] where ip = '$addr'" ; 33 Db::query($sql); 34 } 35 } 36 37 38 }while(true);
?
轉載于:https://www.cnblogs.com/yuanlipu/p/6431834.html
總結
以上是生活随笔為你收集整理的php select socket的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 数组(二)
 - 下一篇: hadoop 启动or运行mr错误