- client.php
public function index() {
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 22001;
$ip = "127.0.0.1";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
echo "OK.\n";
}
echo "试图连接 '$ip' 端口 '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
echo "连接OK\n";
}
$feedback = new Controller_Page_Cgb_feedback();
$in = $feedback->cgbfeedBack();
$out = '';
if(!socket_write($socket, $in, strlen($in))) {
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
echo "发送到服务器信息成功!\n";
echo "发送的内容为:<font color='red'>$in</font> <br>";
}
while($out = socket_read($socket, 8192)) {
self::errorSocktLog($out, __LINE__);
}
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
- 服务器端
class epoll{
private static $socket;
private static $connections;
private static $buffers;
function epoll($port){
if (!extension_loaded('libevent')) {
die("Please install libevent extension firstly\n");
}
self::$socket = stream_socket_server ('tcp://127.0.0.1:'.$port, $errno, $errstr);
stream_set_blocking(self::$socket, 0);
$base = event_base_new();
$event = event_new();
event_set($event, self::$socket , EV_READ | EV_PERSIST, 'epoll::ev_accept', $base);
event_base_set($event, $base);
event_add($event);
event_base_loop($base);
self::$connections = array();
self::$buffers = array();
}
public static function ev_accept($socket, $flag, $base) {
static $id = 0;
$connection = stream_socket_accept($socket);
stream_set_blocking($connection, 0);
$id += 1;
$buffer = event_buffer_new($connection, array(__CLASS__, 'ev_read'), array(__CLASS__, 'ev_write'), array(__CLASS__, 'ev_error'), $id);
event_buffer_base_set($buffer, $base);
event_buffer_timeout_set($buffer, 30, 30);
event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff);
event_buffer_priority_set($buffer, 10);
event_buffer_enable($buffer, EV_READ | EV_PERSIST);
self::$connections[$id] = $connection;
echo 'In-> $id='.$id.',$connection='.$connection."/n";
self::$buffers[$id] = $buffer;
}
public static function ev_error($buffer, $error, $id) {
event_buffer_disable(self::$buffers[$id], EV_READ | EV_WRITE);
event_buffer_free(self::$buffers[$id]);
echo 'Ot-> $id='.$id."/n";
fclose(self::$connections[$id]);
unset(self::$buffers[$id], self::$connections[$id]);
}
public static function ev_read($buffer, $id) {
static $ct=0;
static $ct_last=0;
while ($read = event_buffer_read($buffer, 256))
{
echo $ct_last = $read;
}
$new = $ct_last.'ok';
$len = strlen($new);
$responseState = event_buffer_write($buffer, $new,$len);
if ($responseState) {
echo "Sent Bytes: $new \n";
} else {
echo "response error $len \n";
}
}
}
new epoll(1088);