A lot of people have suggested to increase the performance of MoinMoin. On thing discussed was to move away from CGI because it forces to load everything - from the python interpreter over the modules to the page data - for every request. But persistance and a real Wikiserver would have to deal with concurrency and a lot of problems resulting from that.

I want to suggest a middle way: use CGI for the concurrency and one process for page rendering.

The new CGI would only put the request in a queue and wait for a response from the WikiServer. The WikiServer reads one request after the other and sends the page back to the CGI. Because the WikiServer is single threaded it can be programmed very easily and would only exist of the normal MoinMoin code and a replacement of maincgi.py. Caching page or user objects would be easy. If every object would check if its files have changed, it would be possible to run several Wikiservers at once to use more than one processor.

Of cause this will need some minor changes to the MoinMoin code base, but it should be possible to run MoinMoin in server mode and in CGI mode with sharing 95% of the code. Especially the edit operations will continue to work as they do now.

Communication between the CGI and the WikiServer could be implemented using:

Example:

Advantages:

Problems:

Any suggestions?

MoinMoin: MoinMoinIdeas/WikiServer (last edited 2007-10-29 19:10:15 by localhost)