blob: bdcb25056c93804c7c4aa0a69cd7943299be4919 [file]
<?php
error_reporting(E_ALL);
require_once __DIR__ . '/../../vendor/autoload.php';
require_once __DIR__ . '/protocols.php';
$opts = getopt(
'h::',
[
'port::',
'domain-socket::',
'pipe::',
'server-type::',
'transport::',
'protocol::',
'multiplex::',
'abstract-namespace::',
'ssl::',
'zlib::',
'processor-events::',
'workers::',
]
);
if (isset($opts['h'])) {
echo <<<HELP
-h | --help produce help message
--port=arg (9090) Port number to listen
--domain-socket=arg Unix Domain Socket (e.g. /tmp/ThriftTest.thrift)
--pipe=arg Windows Named Pipe (e.g. MyThriftPipe)
--server-type=arg (simple) type of server, "simple", "thread-pool",
"threaded", or "nonblocking"
--transport=arg (buffered) transport: buffered, framed, http, anonpipe, zlib
--protocol=arg (binary) protocol: binary, compact, json, accel
--multiplex Add TMultiplexedProtocol service name "ThriftTest"
--abstract-namespace Create the domain socket in the Abstract Namespace
(no connection with filesystem pathnames)
--ssl Encrypted Transport using SSL
--zlib Wrapped Transport using Zlib
--processor-events processor-events
-n=arg | --workers=arg (=4) Number of thread pools workers. Only valid for
thread-pool server type
HELP;
exit(0);
}
$port = (int) ($opts['port'] ?? 9090);
$transport = $opts['transport'] ?? 'buffered';
$protocol = $opts['protocol'] ?? 'binary';
// HTTP transport: delegate to HttpRouter (its CLI-launcher branch execs into
// `php -S` with HttpRouter itself as the per-request handler).
if ($transport === 'http') {
require __DIR__ . '/HttpRouter.php';
return;
}
$loader = new \Thrift\ClassLoader\ThriftClassLoader();
$loader->registerDefinition('ThriftTest', __DIR__ . '/gen-php-classmap');
$loader->register();
require_once __DIR__ . '/Handler.php';
$serverTransportFactory = match ($transport) {
'framed' => new \Thrift\Factory\TFramedTransportFactory(),
default => new \Thrift\Factory\TTransportFactory(),
};
$protocolFactory = thrift_test_protocol_factory($protocol);
// `localhost` may resolve to an IPv6-only listener in newer PHP/runtime combinations,
// while some cross-test clients still connect via 127.0.0.1. Bind explicitly to IPv4.
$serverTransport = new \Thrift\Server\TServerSocket('127.0.0.1', $port);
$processor = new \ThriftTest\ThriftTestProcessor(new \Handler());
$server = new \Thrift\Server\TSimpleServer(
$processor,
$serverTransport,
$serverTransportFactory,
$serverTransportFactory,
$protocolFactory,
$protocolFactory,
);
echo "Starting the Test server...\n";
$server->serve();