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?

Reply via email to