PHP Socket实现websocketStream实现
Posted 日拱一卒,功不唐捐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP Socket实现websocketStream实现相关的知识,希望对你有一定的参考价值。
除了socket函数也可以使用stream函数来实现服务器与客户端。
参考php 的Stream实现服务器客户端模型:
http://php.net/manual/en/book.stream.php
http://blog.csdn.net/shagoo/article/details/6396089
服务器端代码:
1 <?php 2 //设置不超时 3 set_time_limit(0); 4 5 class SocketServer 6 { 7 public function __construct($port) 8 { 9 global $errno, $errstr; 10 11 $socket = stream_socket_server(\'tcp://127.0.0.1:\'.$port, $errno, $errstr); 12 while($conn = stream_socket_accept($socket, -1)) 13 { 14 $buff = \'\'; 15 $data = \'\'; 16 17 //读取请求数据直到遇到\\r\\n结束符 18 while(!preg_match(\'#\\r\\n#\', $buff)) 19 { 20 $buff = fread($conn, 1024); 21 $data .= preg_replace(\'#\\r\\n#\', \'\', $buff); 22 } 23 fwrite($conn, $data); 24 fclose($conn); 25 } 26 fclose($socket); 27 } 28 } 29 30 new SocketServer(1212);
客户端
1 <?php 2 3 if(isset($argv[1])) 4 { 5 $msg = $argv[1]; 6 $socket = stream_socket_client(\'tcp://127.0.0.1:1212\', $errno, $errstr); 7 if(!$socket) 8 { 9 die($errno.$errstr); 10 } 11 else 12 { 13 // stream_set_blocking($socket, 0); 14 for($index = 0; $index < 3; $index++) 15 { 16 fwrite($socket, " client: $msg $index "); 17 usleep(100000); 18 } 19 fwrite($socket, "\\r\\n"); 20 $response = fread($socket, 1024); 21 file_put_contents(\'log.txt\', date("[H:i:s] ", time()).$response."\\n", FILE_APPEND); 22 fclose($socket); 23 } 24 } 25 else 26 { 27 for($index = 0; $index < 3; $index++) 28 { 29 system(\'PHP \'.__FILE__." $index:test"); 30 } 31 }
cli下运行效果
去掉13行的设置非阻塞模式的代码后,客户端由于设置了usleep()延时,无法写入服务器返回的数据。
当然在客户端不在乎接受结果的情况下,可以使用非阻塞模式来获得最大效率。
以上是关于PHP Socket实现websocketStream实现的主要内容,如果未能解决你的问题,请参考以下文章