def make_server(processor): """ Creates a TCppServer given a processor. This is the function used internally, but it may be of interest separately as well. """ server = TCppServer(processor) server.setPort(0) server.setNumCPUWorkerThreads(1) server.setNumIOWorkerThreads(1) server.setNewSimpleThreadManager(1, 5, False, 50) return server
class TestServer(BaseFacebookTestCase): def setUp(self): super(TestServer, self).setUp() processor = SleepService.Processor(SleepHandler()) self.server = TCppServer(processor) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_port = addr[1] def stopServer(self): if self.server: self.server.stop() self.server = None def testSpace(self): space = SpaceProcess(self.server_port) space.start() space.join() self.stopServer() self.assertEquals(space.exitcode, 0) def testParallel(self): parallel = ParallelProcess(self.server_port) parallel.start() start_time = time.time() # this should take about 3 seconds. In practice on an unloaded # box, it takes about 3.6 seconds. parallel.join() duration = time.time() - start_time print("total time = {}".format(duration)) self.stopServer() self.assertEqual(parallel.exitcode, 0) self.assertLess(duration, 5)
def make_server(processor): """ Creates a TCppServer given a processor. This is the function used internally, but it may be of interest separately as well. """ server = TCppServer(processor) server.setPort(0) server.setNumCPUWorkerThreads(1) server.setNumIOWorkerThreads(1) server.setNewSimpleThreadManager(count=1, pendingTaskCountMax=5, enableTaskStats=False, maxQueueLen=50) return server
class TestServer(BaseFacebookTestCase): def getProcessor(self): processor = SleepService.Processor( SleepHandler(self.noop_event, self.shutdown_event)) self.event_handler = SleepProcessorEventHandler() processor.setEventHandler(self.event_handler) return processor def setUp(self): super(TestServer, self).setUp() self.noop_event = threading.Event() self.shutdown_event = threading.Event() self.serverEventHandler = TestServerEventHandler() self.server = TCppServer(self.getProcessor()) self.server.setServerEventHandler(self.serverEventHandler) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_addr = addr def stopServer(self): if self.server: self.server.stop() self.server = None
class TestServer(BaseFacebookTestCase): def getProcessor(self): processor = SleepService.Processor(SleepHandler(self.noop_event)) self.event_handler = SleepProcessorEventHandler() processor.setEventHandler(self.event_handler) return processor def setUp(self): super(TestServer, self).setUp() self.noop_event = threading.Event() self.serverEventHandler = TestServerEventHandler() self.server = TCppServer(self.getProcessor()) self.server.setServerEventHandler(self.serverEventHandler) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_addr = addr def stopServer(self): if self.server: self.server.stop() self.server = None
def make_server(processor): """ Creates a TCppServer given a processor. This is the function used internally, but it may be of interest separately as well. """ server = TCppServer(processor) server.setPort(0) server.setNumCPUWorkerThreads(1) server.setNumIOWorkerThreads(1) server.setNewSimpleThreadManager( count=1, pendingTaskCountMax=5, enableTaskStats=False ) return server
def initTask(self): """Overridden to bind sockets, etc""" super(CPPServerTask, self).initTask() self._stopped = False self.server = TCppServer(self.processor) # TODO: There is no API to set host yet. # self.server.setHost(self.host) self.server.setPort(self.port) self.server.setNWorkerThreads(self.num_threads) self.server.setup() self.bound_addrs = [self.server.getAddress()] for addrinfo in self.bound_addrs: self.bound_host, self.bound_port = addrinfo[0:2] self.logger.info( "%s Server Started on %s", self.name, self._fmt_hostport(self.bound_host, self.bound_port))
def setUp(self): super(TestServer, self).setUp() self.noop_event = threading.Event() self.serverEventHandler = TestServerEventHandler() self.server = TCppServer(self.getProcessor()) self.server.setServerEventHandler(self.serverEventHandler) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_addr = addr
def initTask(self): """Overridden to bind sockets, etc""" super(CPPServerTask, self).initTask() self._stopped = False self.server = TCppServer(self.processor) # TODO: There is no API to set host yet. # self.server.setHost(self.host) self.server.setPort(self.port) self.server.setNWorkerThreads(self.num_threads) self.server.setup() self.bound_addrs = [self.server.getAddress()] for addrinfo in self.bound_addrs: self.bound_host, self.bound_port = addrinfo[0:2] self.logger.info("%s Server Started on %s", self.name, self._fmt_hostport(self.bound_host, self.bound_port))
def setUp(self): super(TestServer, self).setUp() processor = SleepService.Processor(SleepHandler()) self.server = TCppServer(processor) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_port = addr[1]
class CPPServerTask(ThriftServerTask): """Spin up a thrift TNonblockingServer in a sparts worker thread""" # DEFAULT_HOST = '0.0.0.0' DEFAULT_PORT = 0 OPT_PREFIX = 'thrift' bound_host = bound_port = None # host = option(default=lambda cls: cls.DEFAULT_HOST, metavar='HOST', # help='Address to bind server to [%(default)s]') port = option(default=lambda cls: cls.DEFAULT_PORT, type=int, metavar='PORT', help='Port to run server on [%(default)s]') num_threads = option(name='threads', default=4, type=int, metavar='N', help='Server Worker Threads [%(default)s]') def initTask(self): """Overridden to bind sockets, etc""" super(CPPServerTask, self).initTask() self._stopped = False self.server = TCppServer(self.processor) # TODO: There is no API to set host yet. # self.server.setHost(self.host) self.server.setPort(self.port) self.server.setNWorkerThreads(self.num_threads) self.server.setup() self.bound_addrs = [self.server.getAddress()] for addrinfo in self.bound_addrs: self.bound_host, self.bound_port = addrinfo[0:2] self.logger.info("%s Server Started on %s", self.name, self._fmt_hostport(self.bound_host, self.bound_port)) def _fmt_hostport(self, host, port): if ':' in host: return '[%s]:%d' % (host, port) else: return '%s:%d' % (host, port) def stop(self): """Overridden to tell the thrift server to shutdown asynchronously""" self.server.stop() def _runloop(self): """Overridden to execute TNonblockingServer's main loop""" self.server.serve()
class TestServer(BaseFacebookTestCase): def setUp(self): super(TestServer, self).setUp() self.noop_event = threading.Event() processor = SleepService.Processor(SleepHandler(self.noop_event)) self.event_handler = SleepProcessorEventHandler() processor.setEventHandler(self.event_handler) self.serverEventHandler = TestServerEventHandler() self.server = TCppServer(processor) self.server.setServerEventHandler(self.serverEventHandler) self.addCleanup(self.stopServer) # Let the kernel choose a port. self.server.setPort(0) self.server_thread = threading.Thread(target=self.server.serve) self.server_thread.start() for t in range(30): addr = self.server.getAddress() if addr: break time.sleep(0.1) self.assertTrue(addr) self.server_addr = addr def stopServer(self): if self.server: self.server.stop() self.server = None def testSpace(self): space = SpaceProcess(self.server_addr) space.start() client_sockname, client_peername = space.queue.get() space.join() self.stopServer() self.assertEquals(space.exitcode, 0) self.assertEquals(self.event_handler.last_peer_name, client_sockname) self.assertEquals(self.event_handler.last_sock_name, client_peername) self.assertEquals(self.serverEventHandler.connCreated, 1) self.assertEquals(self.serverEventHandler.connDestroyed, 1) def testParallel(self): parallel = ParallelProcess(self.server_addr) parallel.start() start_time = time.time() # this should take about 3 seconds. In practice on an unloaded # box, it takes about 3.6 seconds. parallel.join() duration = time.time() - start_time print("total time = {}".format(duration)) self.stopServer() self.assertEqual(parallel.exitcode, 0) self.assertLess(duration, 5) def testOneway(self): oneway = OnewayProcess(self.server_addr) oneway.start() oneway.join() self.stopServer() self.assertTrue(self.noop_event.wait(5))
class CPPServerTask(ThriftServerTask): """Spin up a thrift TNonblockingServer in a sparts worker thread""" # DEFAULT_HOST = '0.0.0.0' DEFAULT_PORT = 0 OPT_PREFIX = 'thrift' bound_host = bound_port = None # host = option(default=lambda cls: cls.DEFAULT_HOST, metavar='HOST', # help='Address to bind server to [%(default)s]') port = option(default=lambda cls: cls.DEFAULT_PORT, type=int, metavar='PORT', help='Port to run server on [%(default)s]') num_threads = option(name='threads', default=4, type=int, metavar='N', help='Server Worker Threads [%(default)s]') def initTask(self): """Overridden to bind sockets, etc""" super(CPPServerTask, self).initTask() self._stopped = False self.server = TCppServer(self.processor) # TODO: There is no API to set host yet. # self.server.setHost(self.host) self.server.setPort(self.port) self.server.setNWorkerThreads(self.num_threads) self.server.setup() self.bound_addrs = [self.server.getAddress()] for addrinfo in self.bound_addrs: self.bound_host, self.bound_port = addrinfo[0:2] self.logger.info( "%s Server Started on %s", self.name, self._fmt_hostport(self.bound_host, self.bound_port)) def _fmt_hostport(self, host, port): if ':' in host: return '[%s]:%d' % (host, port) else: return '%s:%d' % (host, port) def stop(self): """Overridden to tell the thrift server to shutdown asynchronously""" self.server.stop() def _runloop(self): """Overridden to execute TNonblockingServer's main loop""" self.server.serve()
from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals from fb303.ContextFacebookBase import ContextFacebookBase from thrift.Thrift import TProcessorEventHandler from thrift.server.TCppServer import TCppServer from test.reverse import ReverseService, ttypes class ReverseEventHandler(TProcessorEventHandler): def getHandlerContext(self, fn_name, server_context): return server_context class ReverseHandler(ContextFacebookBase, ReverseService.ContextIface): def __init__(self): ContextFacebookBase.__init__(self, "reverse") def reverse(self, handler_ctx, req): print("client_principal is {}".format(handler_ctx.getClientPrincipal())) return ttypes.Response(str="".join(reversed(req.str))) processor = ReverseService.ContextProcessor(ReverseHandler()) processor.setEventHandler(ReverseEventHandler()) server = TCppServer(processor) server.setPort(9999) server.serve()