[ https://issues.apache.org/jira/browse/THRIFT-3083?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
James E. King, III resolved THRIFT-3083. ---------------------------------------- Resolution: Fixed > 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.8, 0.9, 0.9.1, 0.9.2 > Reporter: James E. King, III > Assignee: James E. King, III > Fix For: 0.9.3 > > Attachments: THRIFT-3083-server-files.tar, THRIFT-3083.patch > > > 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, thus blocking the server thread until the client disconnects. > 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. This improves the > predictability of thrift and helps improve maintainability. -- This message was sent by Atlassian JIRA (v6.3.4#6332)