This is my TODO list.
If you have a solution for an item on this list, or
if you have a topic to add to this list,
drop me an email-- irmen@users.sourceforge.net

* Put this stuff in CVS.

* Generic service manager instead of separate 'ns' and 'es' scripts.
  Use some sort of plugin system to show all available services?
  (with their options of course)

* Callback objects on client: right now when they throw an exception,
  it travels back to the calling server--is this wat we want?
  Perhaps we should have a special 'callback' object type, a subclass
  of ObjBase, that does only local exceptions, so the server stays
  clear of any problems on the client?

* Docs: complete them (chapter 6, implementation!)

* Mobile code: breaks when client has new version of the module, and
  the server doesn't. The server will still use the old code.
  Can't be fixed?

* Improve protocol compression implementation (better use of protocol
  flags?) Should we send compressed data only if client does?

* Timeouts and/or non-blocking sockets so noone can block the server. 

* Possibility to kill object connection of the object that did the
  current request... use special PyroException that will be caught
  in the protocol layer? Or make it more general, that the object can
  retrieve some meta info about the caller, including the socket?

* Object activation in  Persistent name server...

* Code cleanup; PYROAdapter/TCPServer/Daemon look like spaghetti.


Wild thoughts:

* Unix domain sockets protocol (faster than TCP/IP, but only on local host?)

* More interceptors in proxy/object adapters? --> slowdown...

* Socket pooling - we now have a socket per Pyro object. Better to have
  a limited pool of sockets and multiplex over these. --> Request processing
  code has to change in a major way, especially the multithreaded stuff.

* Threading: split a thread directly in the TCPServer? This prevents
  that it hangs when somebody connects but never finishes the message
  (server will now hang on reading the data from the socket).
  When we split a thread directly after the select, we don't block
  the server. Be sure that we don't have multiple threads reading
  from the same socket!!!
  Perhaps non-blocking sockets + timeouts help too?

* Pyro object pool; scalability on server. Multiple object instances
  with the same name to handle high loads. Objects will have to be
  stateless to make this possible!

