0
我在php和libevent上寫了一個簡單的服務器。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://xxx:33333/,在第一結果立即出現,在第二中3秒以上 1 - 本地時間是星期三,2015年9月3日21: 17:11 2 - 當地時間是星期四,2015年9月03日21:17:17
我以爲libevent是多線程的。但我的例子表明不是。是這樣嗎?或者我在代碼中犯了錯誤?
謝謝
每個php請求都是彼此獨立的,除非您使用基於文件的會話,在這種情況下,您被迫進入串行模式 - 第一次命中將鎖定會話並阻止任何其他並行請求該用戶。 –
但它不是php請求,它是請求到我的服務器($ server = stream_socket_server(「tcp://0.0.0.0:33333」,$ errno,$ errstr)),所以沒有會話 –