function connect_dest() { global $read_timeout, $write_timeout; echo "connect dest...\n"; global $base; $buffer = new EventBufferEvent($base, NULL, EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS, 'readcb', null, 'eventcb', $base); $buffer->enable(Event::READ); $buffer->setTimeouts($read_timeout, $write_timeout); $buffer->connect('127.0.0.1:8000'); $buffer->write('client data, ' . time()); }
function send_data() { global $count; global $url, $port; global $base; $pid = posix_getpid(); $rand = random(); $data = time() . "-{$rand}-{$pid}-{$count}"; $bev = new EventBufferEvent($base, null, EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS); $bev->setTimeouts(3, 3); $bev->setCallbacks('readcb', null, 'eventcb', $pid); $bev->enable(Event::READ | Event::WRITE); $bev->connect("{$url}:{$port}"); $bev->write($data . "\r\n"); $base->dispatch(); lg("[{$pid}] {$data}"); //lg("pid:{$pid},count:{$count}"); exit(0); }
<?php error_reporting(E_ALL); $base = new EventBase(); $buffer = new EventBufferEvent($base, NULL, EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::OPT_DEFER_CALLBACKS, 'readcb', 'writecb', 'eventcb', $base); $buffer->enable(Event::READ); $buffer->setTimeouts(3, 3); $buffer->connect('127.0.0.1:8000'); $base->dispatch(); function readcb($buffer, $base) { echo "read running...\n"; $data = ''; while ($read = $buffer->read(1024)) { $data .= $read; } echo 'read input buffer, data: ', $data, PHP_EOL; $body = "client.hello"; $length = strlen($body); $buffer->write($body); } function writecb($buffer, $base) { echo "write running...\n"; free($buffer, $base); echo "close client.\n"; } function eventcb($buffer, $events, $base) { echo "event running, status: {$events}\n"; if ($events & (EventBufferEvent::EOF | EventBufferEvent::ERROR)) {
} // Event callback function eventcb($bev, $stat, $base) { var_dump('status: ' . $stat); if ($stat & EventBufferEvent::CONNECTED) { echo "Connected.\n"; } elseif ($stat & (EventBufferEvent::ERROR | EventBufferEvent::EOF)) { if ($stat & EventBufferEvent::ERROR) { echo "DNS error: ", $bev->getDnsErrorString(), PHP_EOL; } echo "Closing\n"; $base->exit(); exit("Done\n"); } elseif ($stat & EventBufferEvent::TIMEOUT) { echo "Timeout\n"; } } function writecb($bev, $base) { echo "writecb\r\n"; $bev->output->add(microtime(true) . "\r\n"); } $base = new EventBase(); $bev = new EventBufferEvent($base, null, EventBufferEvent::OPT_CLOSE_ON_FREE | EventBufferEvent::TIMEOUT, "readcb", null, "eventcb", $base); //"readcb", "writecb", "eventcb", $base); $bev->enable(Event::READ | Event::WRITE); $bev->getOutput()->add(microtime(true) . "\r\n"); $bev->setTimeouts(2, 2); $bev->connect('127.0.0.1:8000'); $base->dispatch();