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

首頁 > 開發 > PHP > 正文

php+html5基于websocket實現聊天室的方法

2024-05-04 23:37:52
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php+html5基于websocket實現聊天室的方法,實例分析了php結合html5的websocket通訊的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php+html5基于websocket實現聊天室的方法。分享給大家供大家參考。具體如下:

html5的websocket 實現了雙向通信,折騰了幾天弄了個聊天室,分享給大家

 

 
  1. <?php 
  2. error_reporting(E_ALL); 
  3. ob_implicit_flush(); 
  4. $sk=new Sock('127.0.0.1',8000); 
  5. $sk->run(); 
  6. class Sock{ 
  7. public $sockets; 
  8. public $users; 
  9. public $master; 
  10. public function __construct($address, $port){ 
  11. $this->master=$this->WebSocket($address, $port); 
  12. $this->sockets=array('s'=>$this->master); 
  13. function run(){ 
  14. while(true){ 
  15. $changes=$this->sockets; 
  16. socket_select($changes,$write=NULL,$except=NULL,NULL); 
  17. foreach($changes as $sock){ 
  18. if($sock==$this->master){ 
  19. $client=socket_accept($this->master); 
  20. //$key=uniqid(); 
  21. $this->sockets[]=$client; 
  22. $this->users[]=array( 
  23. 'socket'=>$client, 
  24. 'shou'=>false 
  25. ); 
  26. }else
  27. $len=socket_recv($sock,$buffer,2048,0); 
  28. $k=$this->search($sock); 
  29. if($len<7){ 
  30. $name=$this->users[$k]['ming']; 
  31. $this->close($sock); 
  32. $this->send2($name,$k); 
  33. continue
  34. if(!$this->users[$k]['shou']){ 
  35. $this->woshou($k,$buffer); 
  36. }else
  37. $buffer = $this->uncode($buffer); 
  38. $this->send($k,$buffer); 
  39. function close($sock){ 
  40. $k=array_search($sock, $this->sockets); 
  41. socket_close($sock); 
  42. unset($this->sockets[$k]); 
  43. unset($this->users[$k]); 
  44. $this->e("key:$k close"); 
  45. function search($sock){ 
  46. foreach ($this->users as $k=>$v){ 
  47. if($sock==$v['socket']) 
  48. return $k; 
  49. return false
  50. function WebSocket($address,$port){ 
  51. $server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
  52. socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1); 
  53. socket_bind($server, $address, $port); 
  54. socket_listen($server); 
  55. $this->e('Server Started : '.date('Y-m-d H:i:s')); 
  56. $this->e('Listening on : '.$address.' port '.$port); 
  57. return $server; 
  58. function woshou($k,$buffer){ 
  59. $buf = substr($buffer,strpos($buffer,'Sec-WebSocket-Key:')+18); 
  60. $key = trim(substr($buf,0,strpos($buf,"/r/n"))); 
  61. $new_key = base64_encode(sha1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true)); 
  62. $new_message = "HTTP/1.1 101 Switching Protocols/r/n"
  63. $new_message .= "Upgrade: websocket/r/n"
  64. $new_message .= "Sec-WebSocket-Version: 13/r/n"
  65. $new_message .= "Connection: Upgrade/r/n"
  66. $new_message .= "Sec-WebSocket-Accept: " . $new_key . "/r/n/r/n"
  67. socket_write($this->users[$k]['socket'],$new_message,strlen($new_message)); 
  68. $this->users[$k]['shou']=true
  69. return true
  70. function uncode($str){ 
  71. $mask = array();  
  72. $data = '';  
  73. $msg = unpack('H*',$str);  
  74. $head = substr($msg[1],0,2);  
  75. if (hexdec($head{1}) === 8) {  
  76. $data = false;  
  77. }else if (hexdec($head{1}) === 1){  
  78. $mask[] = hexdec(substr($msg[1],4,2));  
  79. $mask[] = hexdec(substr($msg[1],6,2));  
  80. $mask[] = hexdec(substr($msg[1],8,2));  
  81. $mask[] = hexdec(substr($msg[1],10,2));  
  82. $s = 12;  
  83. $e = strlen($msg[1])-2;  
  84. $n = 0;  
  85. for ($i=$s; $i<= $e; $i+= 2) {  
  86. $data .= chr($mask[$n%4]^hexdec(substr($msg[1],$i,2))); 
  87. $n++;  
  88. }  
  89. }  
  90. return $data; 
  91. function code($msg){ 
  92. $msg = preg_replace(array('//r$/','//n$/','//r/n$/',), '', $msg); 
  93. $frame = array();  
  94. $frame[0] = '81';  
  95. $len = strlen($msg);  
  96. $frame[1] = $len<16?'0'.dechex($len):dechex($len);  
  97. $frame[2] = $this->ord_hex($msg);  
  98. $data = implode('',$frame);  
  99. return pack("H*", $data);  
  100. function ord_hex($data) {  
  101. $msg = '';  
  102. $l = strlen($data);  
  103. for ($i= 0; $i<$l; $i++) {  
  104. $msg .= dechex(ord($data{$i}));  
  105. }  
  106. return $msg;  
  107. function send($k,$msg){ 
  108. /*$this->send1($k,$this->code($msg),'all');*/ 
  109. parse_str($msg,$g); 
  110. $this->e($msg); 
  111. $ar=array(); 
  112. if($g['type']=='add'){ 
  113. $this->users[$k]['ming']=$g['ming']; 
  114. $ar['add']=true
  115. $ar['nrong']='歡迎'.$g['ming'].'加入!'
  116. $ar['users']=$this->getusers(); 
  117. $key='all'
  118. }else if($g['type']=='ltiao'){ 
  119. $ar['nrong']=$g['nr']; 
  120. $key=$g['key']; 
  121. $msg=json_encode($ar); 
  122. $this->e($msg); 
  123. $msg = $this->code($msg); 
  124. $this->send1($k,$msg,$key); 
  125. //socket_write($this->users[$k]['socket'],$msg,strlen($msg)); 
  126. function getusers(){ 
  127. $ar=array(); 
  128. foreach($this->users as $k=>$v){ 
  129. $ar[$k]=$v['ming']; 
  130. return $ar; 
  131. function send1($k,$str,$key='all'){ 
  132. if($key=='all'){ 
  133. foreach($this->users as $v){ 
  134. socket_write($v['socket'],$str,strlen($str)); 
  135. }else
  136. if($k!=$key) 
  137. socket_write($this->users[$k]['socket'],$str,strlen($str)); 
  138. socket_write($this->users[$key]['socket'],$str,strlen($str)); 
  139. function send2($ming,$k){ 
  140. $ar['remove']=true
  141. $ar['removekey']=$k; 
  142. $ar['nrong']=$ming.'退出聊天室'
  143. $str = $this->code(json_encode($ar)); 
  144. $this->send1(false,$str,'all'); 
  145. function e($str){ 
  146. $path=dirname(__FILE__).'/log.txt'
  147. $str=$str."/n"
  148. error_log($str,3,$path); 
  149. echo iconv('utf-8','gbk//IGNORE',$str); 
  150. ?> 

希望本文所述對大家的php程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2019国产精品自在线拍国产不卡| 国产精品aaaa| 国产日韩欧美在线| 久久亚洲春色中文字幕| 亚洲人高潮女人毛茸茸| 精品福利在线视频| 色播久久人人爽人人爽人人片视av| 欧美一级淫片丝袜脚交| 精品视频在线播放色网色视频| 色偷偷噜噜噜亚洲男人的天堂| 成人网在线免费看| 日韩成人小视频| 亚洲品质视频自拍网| 欧美精品激情在线观看| 97久久国产精品| 日韩成人激情视频| 国产精品久久久久久久久久久久久| 欧美色播在线播放| 久热99视频在线观看| 日本久久久久久久| 久久国产精品99国产精| 亚洲日本中文字幕免费在线不卡| 欧美亚洲国产视频| 欧美极品在线播放| 欧美性xxxx在线播放| 午夜欧美不卡精品aaaaa| 亚洲精品久久久久久久久| 国产欧美中文字幕| 国产欧美在线观看| 精品国偷自产在线视频| 在线观看日韩视频| 亚洲人成电影网站色xx| 91超碰中文字幕久久精品| 国产精品三级久久久久久电影| 日韩在线免费高清视频| 中文字幕欧美日韩精品| 亚洲综合成人婷婷小说| 久久久电影免费观看完整版| 国产成人精品一区二区三区| 亚洲精品久久久久久久久久久久| 久久亚洲精品一区二区| 欧美精品性视频| 一个人看的www欧美| 欧美巨猛xxxx猛交黑人97人| 欧美日韩第一视频| 91精品国产综合久久香蕉的用户体验| 亚洲精品一区在线观看香蕉| 亚洲国产精品久久91精品| 在线看福利67194| 日韩免费精品视频| 欧美限制级电影在线观看| 亚洲精品免费av| 欧美国产日韩一区二区三区| 最近2019年好看中文字幕视频| 91日韩在线播放| 国产精品视频1区| y97精品国产97久久久久久| 永久免费看mv网站入口亚洲| 国产精品久久久久999| 韩日欧美一区二区| 亚洲一区制服诱惑| 欧美国产日韩免费| 91夜夜揉人人捏人人添红杏| 欧美大尺度激情区在线播放| 久久久中精品2020中文| 欧美在线视频在线播放完整版免费观看| 亚洲综合视频1区| 国产美女高潮久久白浆| 国产精品久久久久999| 日本久久久久久久| 国产精品aaaa| 一区二区三区www| 中文字幕久久亚洲| 中文字幕日韩电影| 日韩av在线天堂网| 国产欧美日韩91| 国产精品户外野外| 亚洲欧洲一区二区三区在线观看| 国产精品久久久久久久久免费| 久久频这里精品99香蕉| 久久久女人电视剧免费播放下载| 91久久久精品| 日本欧美中文字幕| 国产精品美女主播在线观看纯欲| 欧美性极品xxxx娇小| 欧美中文字幕视频| 国产精品一区二区三区免费视频| 亚洲最大成人网色| 欧美视频在线看| 茄子视频成人在线| 日韩的一区二区| 精品久久久久久久久久国产| 97久久国产精品| 91午夜理伦私人影院| 国产精品夜间视频香蕉| 亚洲美女av在线播放| 精品调教chinesegay| 欧美性理论片在线观看片免费| 久久九九热免费视频| 中文字幕亚洲欧美一区二区三区| 成人妇女淫片aaaa视频| 日韩免费视频在线观看| 精品视频在线播放| 国产狼人综合免费视频| 夜夜狂射影院欧美极品| 亚洲一区二区中文| 日韩在线视频免费观看高清中文| 欧美亚洲另类激情另类| 国产成人福利视频| 亚洲影院色在线观看免费| 中文字幕久久精品| 国产成人精品在线视频| 亚洲一区免费网站| 国内精品久久久久影院优| 国产日韩精品在线播放| 一区二区欧美激情| 日韩经典一区二区三区| 久热精品视频在线观看| 欧美特级www| 亚洲国产福利在线| 欧美日韩国产丝袜美女| 成人写真福利网| 国产精自产拍久久久久久| 久久亚洲精品一区| 欧美性20hd另类| 97久久精品在线| 久久99青青精品免费观看| 欧美另类精品xxxx孕妇| 国产精品综合网站| 全亚洲最色的网站在线观看| xxxx欧美18另类的高清| 宅男66日本亚洲欧美视频| 国产精品av电影| 日本欧美黄网站| 91夜夜未满十八勿入爽爽影院| 国产午夜精品美女视频明星a级| 国产精品ⅴa在线观看h| 久久视频国产精品免费视频在线| 国产精品欧美风情| 成人国内精品久久久久一区| 动漫精品一区二区| 亚洲无线码在线一区观看| 97国产精品视频| 97精品国产97久久久久久免费| 国产精品一区二区久久| 欧美成人自拍视频| 91免费欧美精品| 日韩免费不卡av| 97视频在线观看免费高清完整版在线观看| 欧美激情aaaa| 黄色一区二区在线观看| 疯狂蹂躏欧美一区二区精品| 欧美黑人一区二区三区| 大胆欧美人体视频| 日韩av一区二区在线观看| 欧美日韩xxxxx| 亚洲男女性事视频| 91国产精品91| 性色av香蕉一区二区| 欧美日韩福利电影| 欧美高清一级大片| 精品亚洲夜色av98在线观看| 国产精品久久久久久久久久三级| 欧美野外猛男的大粗鳮|