Files
2023-03-04 08:57:52 +03:00

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");