Я написал простой сервер на php и libevent.
<?php
function process($fd, $events, $arg) {
$conn = stream_socket_accept($fd);
//stream_set_blocking($conn, 0);
$read = fread($conn, 4096);
echo "new connection " . (string)$conn . "\n";
fwrite($conn, "The local time is " . date('r') . "\n");
fclose($conn);
sleep(3);
}
$server = stream_socket_server("tcp://0.0.0.0:33333", $errno, $errstr);
stream_set_blocking($server, 0);
$base = event_base_new();
$event = event_new();
event_set($event, $server, EV_READ | EV_PERSIST, "process");
event_base_set($event, $base);
event_add($event);
event_base_loop($base);
При этом загружаю его в 2 разных браузера Http: // ххх: 33333 /, в первом результат появляется сразу, во втором через 3 и более секунд
1 — местное время — чт, 03 сен 2015 21:17:11
2 — Местное время Четверг, 03 сентября 2015 21:17:17
Я думал, что libevent многопоточный. Но мой пример показывает, что нет. Это так? Или у меня ошибка в коде?
Спасибо
Нет. Libevent не является многопоточным. Это обрабатывает одно событие за раз.
Других решений пока нет …