2015-09-03 90 views
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是多線程的。但我的例子表明不是。是這樣嗎?或者我在代碼中犯了錯誤?

謝謝

+0

每個php請求都是彼此獨立的,除非您使用基於文件的會話,在這種情況下,您被迫進入串行模式 - 第一次命中將鎖定會話並阻止任何其他並行請求該用戶。 –

+0

但它不是php請求,它是請求到我的服務器($ server = stream_socket_server(「tcp://0.0.0.0:33333」,$ errno,$ errstr)),所以沒有會話 –

回答