<?php
02 | if (php_sapi_name() !=
'cli' ) { |
06 | # php.ini 里 error_reporting
设置要么生要么死 |
07 | # while (true) 太凶猛了,写日志会占用高的IO |
13 | $recvfile =
'./recv.txt' ; |
19 | $datalen = 1024 * 1024; |
21 | $ip =
'192.168.125.233' ; |
25 | $sockect = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); |
27 | if (!socket_bind( $sockect ,
$ip , $port )) { |
28 | exit ( "socket bind fail\n" ); |
32 | socket_listen( $sockect ); |
34 | socket_set_nonblock( $sockect ); |
40 | $client
= socket_accept( $sockect ); |
41 | if
( is_resource ( $client )) { |
43 | socket_write( $client ,
$heartag , strlen ( $heartag )); |
45 | printf( "client index:%d\n" ,
count ( $clients )); |
49 | if
(! empty ( $clients )) { |
50 | foreach
( $clients
AS $idx => & $client ) { |
51 | if
( is_resource ( $client )) { |
53 | # 接收客户端数据 注意:第四个参数必须为零,这跟手册上不一样,还没搞明白 |
54 | if
(socket_recv( $client ,
$recvstr , $datalen , 0) === 0) { |
55 | socket_close( $client ); |
56 | socket_shutdown( $client ); |
57 | unset( $clients [ $idx ]); |
61 | if
( $recvstr
== $heartag ) { |
63 | socket_write( $client ,
$heartag , strlen ( $heartag )); |
64 | }
elseif (trim( $recvstr ) !=
"" ) { |
66 | $stdmsg
= sprintf( "%d:%s\n" ,
$idx , $recvstr ); |
67 | file_put_contents ( $recvfile ,
$stdmsg , FILE_APPEND); |
71 | unset( $recvstr ,
$idx ); |
74 | # 要睡多久?这是个问题,不睡 CPU 很累, 内存吃的厉害 |
78 | socket_close( $sockect ); |
79 | socket_shutdown( $sockect ); |
http://my.oschina.net/oodbqpoo/blog/68492