Интересно, какой самый быстрый способ отправить данные от одного процесса к другому в PHP? Данные представляют собой только короткую строку. В настоящее время у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс. Интересно, может ли разделяемая память быть быстрее? Однако я понятия не имею, как заставить другой процесс регулярно проверять общую память, чтобы определять, записываются ли какие-либо новые данные?
Текущее решение:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
И клиент:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Это решение работает полностью, отлично , но результат такой:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Есть идеи, как сделать этот сценарий быстрее или разработать более быстрое решение (возможно, с общей памятью)?
Заранее спасибо,
Интересно, а какой самый быстрый способ передать данные от одного процесса другому в PHP? Данные представляют собой только короткую строку. В настоящее время у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс. Интересно, может ли разделяемая память быть быстрее? Однако я понятия не имею, как заставить другой процесс регулярно проверять общую память, чтобы определять, записываются ли какие-либо новые данные?
Текущее решение:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
И клиент:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Это решение работает полностью, отлично , но результат такой:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Есть идеи, как сделать этот сценарий быстрее или разработать более быстрое решение (возможно, с общей памятью)?
Заранее спасибо,
Интересно, а какой самый быстрый способ передать данные от одного процесса другому в PHP? Данные представляют собой только короткую строку. В настоящее время у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс. Интересно, может ли разделяемая память быть быстрее? Однако я понятия не имею, как заставить другой процесс регулярно проверять общую память, чтобы определять, записываются ли какие-либо новые данные?
Текущее решение:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
И клиент:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Это решение работает полностью, отлично , но результат такой:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Есть идеи, как сделать этот сценарий быстрее или разработать более быстрое решение (возможно, с общей памятью)?
Заранее спасибо, В настоящее время у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс. Интересно, может ли разделяемая память быть быстрее? Однако я понятия не имею, как заставить другой процесс регулярно проверять общую память, чтобы определять, записываются ли какие-либо новые данные?
Текущее решение:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
И клиент:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Это решение работает полностью, отлично , но результат такой:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Есть идеи, как сделать этот сценарий быстрее или разработать более быстрое решение (возможно, с общей памятью)?
Заранее спасибо, В настоящее время у меня есть решение с разработанными сокетами AF_UNIX, но тесты показывают, что для передачи данных от одного процесса к другому требуется 0,100 мс. Интересно, может ли разделяемая память быть быстрее? Однако я понятия не имею, как заставить другой процесс регулярно проверять общую память, чтобы определять, записываются ли какие-либо новые данные?
Текущее решение:
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
И клиент:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Это решение работает полностью, отлично , но результат такой:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Есть идеи, как сделать этот сценарий быстрее или разработать более быстрое решение (возможно, с общей памятью)?
Заранее спасибо, Джонас