php libevent 是多线程的?
php libevent is multithreaded?
我已经在 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 月 3 日星期四 21:17:17
我以为 libevent 是多线程的。但我的例子表明并非如此。是这样吗?还是我代码有误?
谢谢
没有。 libevent 不是多线程的。它处理 one event at a time.
我已经在 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 月 3 日星期四 21:17:17
我以为 libevent 是多线程的。但我的例子表明并非如此。是这样吗?还是我代码有误?
谢谢
没有。 libevent 不是多线程的。它处理 one event at a time.