James E. King, III created THRIFT-3083:
------------------------------------------
Summary: C++ Consolidate server processing loops in TSimpleServer,
TThreadedServer, TThreadPoolServer
Key: THRIFT-3083
URL: https://issues.apache.org/jira/browse/THRIFT-3083
Project: Thrift
Issue Type: Improvement
Components: C++ - Library
Affects Versions: 0.9.2, 0.9.1, 0.9, 0.8
Reporter: James E. King, III
Currently the simple and threaded servers all share a very similar serve()
workflow. This improvement story is to consolidate them and extract out the
specific differences to limit code duplication.
1. Add TServerFramework that implements serve() and stop() for TServer, but is
abstract.
2. Add virtual methods onClientConnected, onClientDisconnected to
TServerFramework and require subclasses to implement them.
3. TSimpleServer onClientConnected calls TConnectedClient().run() in the
serve() thread.
4. TThreadedServer::serve() calls TServerFramework::serve() and then waits for
the notification that all clients are gone. ::onClientConnected adds a
TConnectedClient to the task set and starts a thread for it.
::onClientDisconnected removes the client from the task set.
5. TThreadPoolServer would have similar changes
The resulting classes will be much smaller, and the specific differences
between the servers will be more obvious. Further, the server processing loop
which is common to all three will be in one place.
Also add TServerEventHandler::postServe to balance out the fact there is a
preServe, and document the post-conditions of preServe (TServerTransport is
being listened to).
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)