Hi! This is my proposition of design (server side). (Diagram: http://strony.wp.pl/wp/ruf10/design.html)
connection: this is class provided by plugin, it's completely up to the plugin how many objects it creates. Each connection is responsible for extracting the XML-RPC message from its input stream and constructing a Message object. Then passes the Message to connection manager. It's up to the plugin whether the manager sets up the Message.client field or connection object does that. Connection manager: Connection manager is responsible for resolving Message.client to connection object. In case of HTTP and most other transports Message.client can be simply reference to connection object. Next connection manager passes Message with request to the RequestsQueue. Queues: Request- and Response- Both queues are provided by framework, but each transport keeps its own pair, so slower transports can't block faster ones. Actually this is when the plugin finishes it's job; the manager takes Messages from RequestQueues, does anything it needs and puts Response to ResponseQueue; Message.client field is copied from Request, so connection manager knows which connection should handle the Message. Just to be clear: response Message goes the same way, only via ResponsesQueue and until the connection object it's prologless. Message: In this proposal actual message is simply String, encoding is done by plugin (connection object actually); also it contains some client identificator and probably should provide some way for framework to distinguish the transport to send the response I think that's all ...for now comments apreciated and requested Regards, rufio PS client side should be simpler, but what if someone wants roburst way of making many requests? use queues?