156 lines
3.3 KiB
PHP
156 lines
3.3 KiB
PHP
<?php
|
|
|
|
require_once('Socket.php');
|
|
require_once('SharedMemoryChannel.php');
|
|
|
|
function makeRequest($size)
|
|
{
|
|
$result = '';
|
|
for ($i = 0; $i < $size; $i++) $result .= chr(rand() % 256);
|
|
return $result;
|
|
}
|
|
|
|
function testSocket($amount, $reconnect, $size)
|
|
{
|
|
$s = null;
|
|
$current = 0;
|
|
for ($i = 0; $i < $amount; $i++)
|
|
{
|
|
if ($s === null)
|
|
{
|
|
$s = new IPSocket('127.0.0.1', 19876);
|
|
$s->connect();
|
|
$current = 0;
|
|
}
|
|
$m = makeRequest($size);
|
|
$s->sendMessage($m);
|
|
$r = $s->receiveMessage();
|
|
$current++;
|
|
if ($current >= $reconnect)
|
|
{
|
|
$s = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
function testSocketNoDelay($amount, $reconnect, $size)
|
|
{
|
|
$s = null;
|
|
$current = 0;
|
|
for ($i = 0; $i < $amount; $i++)
|
|
{
|
|
if ($s === null)
|
|
{
|
|
$s = new IPSocket('127.0.0.1', 19876);
|
|
$s->setOption(TCP_NODELAY, 1);
|
|
$s->connect();
|
|
$current = 0;
|
|
}
|
|
$m = makeRequest($size);
|
|
$s->sendMessage($m);
|
|
$r = $s->receiveMessage();
|
|
$current++;
|
|
if ($current >= $reconnect)
|
|
{
|
|
$s = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function testUnixSocket($amount, $reconnect, $size)
|
|
{
|
|
$s = null;
|
|
$current = 0;
|
|
for ($i = 0; $i < $amount; $i++)
|
|
{
|
|
if ($s === null)
|
|
{
|
|
$s = new UnixSocket('/tmp/ipc_test_socket');
|
|
$s->connect();
|
|
$current = 0;
|
|
}
|
|
$m = makeRequest($size);
|
|
$s->sendMessage($m);
|
|
$r = $s->receiveMessage();
|
|
$current++;
|
|
if ($current >= $reconnect)
|
|
{
|
|
$s = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
function testSharedMemory($amount, $reconnect, $size)
|
|
{
|
|
$s = null;
|
|
$channel = null;
|
|
$current = 0;
|
|
for ($i = 0; $i < $amount; $i++)
|
|
{
|
|
if ($s === null)
|
|
{
|
|
$s = new UnixSocket('/tmp/ipc_test_socket_shmem');
|
|
$s->connect();
|
|
$s->sendMessage("mem");
|
|
$result = $s->receiveMessage();
|
|
$data = explode(":", $result);
|
|
$channel = new SharedMemoryChannel([
|
|
'send' => $data[0],
|
|
'receive' => $data[1],
|
|
'mem' => $data[2]
|
|
]);
|
|
$current = 0;
|
|
}
|
|
$m = makeRequest($size);
|
|
$channel->sendMessage($m);
|
|
$r = $channel->receiveMessage();
|
|
$current++;
|
|
if ($current >= $reconnect)
|
|
{
|
|
$s = null;
|
|
}
|
|
}
|
|
}
|
|
|
|
$requests_amount = $argv[1];
|
|
$requests_per_connect = $argv[2];
|
|
$request_size = $argv[3];
|
|
|
|
print('Testing '.$requests_amount.' requests, reconnect after '.
|
|
$requests_per_connect.' size '.$request_size."\n");
|
|
|
|
|
|
print("Testing IP socket:\n");
|
|
$start = microtime(true);
|
|
testSocket($requests_amount, $requests_per_connect, $request_size);
|
|
$finish = microtime(true);
|
|
|
|
$elapsed = $finish - $start;
|
|
print('Total: '.round($elapsed, 3).' seconds, '.round($requests_amount / $elapsed, 3).' RPS'."\n");
|
|
|
|
print("Testing IP socket with TCP_NODELAY:\n");
|
|
$start = microtime(true);
|
|
testSocketNoDelay($requests_amount, $requests_per_connect, $request_size);
|
|
$finish = microtime(true);
|
|
|
|
$elapsed = $finish - $start;
|
|
print('Total: '.round($elapsed, 3).' seconds, '.round($requests_amount / $elapsed, 3).' RPS'."\n");
|
|
|
|
|
|
print("Testing Unix socket:\n");
|
|
$start = microtime(true);
|
|
testUnixSocket($requests_amount, $requests_per_connect, $request_size);
|
|
$finish = microtime(true);
|
|
|
|
$elapsed = $finish - $start;
|
|
print('Total: '.round($elapsed, 3).' seconds, '.round($requests_amount / $elapsed, 3).' RPS'."\n");
|
|
|
|
print("Testing shared memory channel:\n");
|
|
$start = microtime(true);
|
|
testSharedMemory($requests_amount, $requests_per_connect, $request_size);
|
|
$finish = microtime(true);
|
|
|
|
$elapsed = $finish - $start;
|
|
print('Total: '.round($elapsed, 3).' seconds, '.round($requests_amount / $elapsed, 3).' RPS'."\n");
|