<?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