| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| module stress_test_server; |
| |
| import std.getopt; |
| import std.parallelism : totalCPUs; |
| import std.stdio; |
| import std.typetuple; |
| import thrift.codegen.processor; |
| import thrift.protocol.binary; |
| import thrift.server.base; |
| import thrift.server.transport.socket; |
| import thrift.transport.buffered; |
| import thrift.transport.memory; |
| import thrift.transport.socket; |
| import thrift.util.hashset; |
| import test_utils; |
| |
| import thrift.test.stress.Service; |
| |
| class ServiceHandler : Service { |
| void echoVoid() { return; } |
| byte echoByte(byte arg) { return arg; } |
| int echoI32(int arg) { return arg; } |
| long echoI64(long arg) { return arg; } |
| byte[] echoList(byte[] arg) { return arg; } |
| HashSet!byte echoSet(HashSet!byte arg) { return arg; } |
| byte[byte] echoMap(byte[byte] arg) { return arg; } |
| |
| string echoString(string arg) { |
| if (arg != "hello") { |
| stderr.writefln(`Wrong string received: %s instead of "hello"`, arg); |
| throw new Exception("Wrong string received."); |
| } |
| return arg; |
| } |
| } |
| |
| void main(string[] args) { |
| ushort port = 9091; |
| auto serverType = ServerType.threaded; |
| TransportType transportType; |
| size_t numIOThreads = 1; |
| size_t taskPoolSize = totalCPUs; |
| |
| getopt(args, "port", &port, "server-type", &serverType, |
| "transport-type", &transportType, "task-pool-size", &taskPoolSize, |
| "num-io-threads", &numIOThreads); |
| |
| alias TypeTuple!(TBufferedTransport, TMemoryBuffer) AvailableTransports; |
| |
| auto processor = new TServiceProcessor!(Service, |
| staticMap!(TBinaryProtocol, AvailableTransports))(new ServiceHandler()); |
| auto serverSocket = new TServerSocket(port); |
| auto transportFactory = createTransportFactory(transportType); |
| auto protocolFactory = new TBinaryProtocolFactory!AvailableTransports; |
| |
| auto server = createServer(serverType, taskPoolSize, numIOThreads, |
| processor, serverSocket, transportFactory, protocolFactory); |
| |
| writefln("Starting %s %s StressTest server on port %s...", transportType, |
| serverType, port); |
| server.serve(); |
| writeln("done."); |
| } |