The way it is now, the JSON runs first, then the XML. I never interleaved the two because I wanted to keep it simple. I can make the XML run first instead and do another test:
FINAL RESULTS ================================== JSON-RPC Average Time: 59.91 ms JSON-RPC Total Time Taken: 10007.80 ms XML-RPC Average Time: 21.84 ms XML-RPC Total Time Taken: 6201.04 ms Result: XML won by: 38.07 ms (274.3% faster) No change when I made XML run first, before JSON. SUMMARY OF THREE ISSUES ======================== 1. Auth and JSON-RPC ------------------------------------- This problem stems from enabling Auth: auth = Auth(db) auth.define_tables() Whenever Auth is enabled, the average time per request for XML-RPC and JSON-RPC are about 45 ms and 65 ms, respectively. However, whenever Auth is not enabled, these times change dramatically, but only for XML-RPC. The average time per request for XML-RPC and JSON-RPC is now about 20 ms and 60 ms, respectively. The time it takes for JSON-RPC requests to run drops about 5 ms per request, however, the time XML-RPC requests drops by 25 ms (more than half). 2. Unicode and JSON-RPC --------------------------------------- As for the unicode issue, I noticed this as well. I also tried going back to simplejsonrpc, but that also returns strings as unicode. Are unicode strings a requirement of the JSON-RPC protocol? 3. SSL and web2py's simplejsonrpc ---------------------------------------------------- Finally, on a note about web2py's simplejsonrpc implementation, it runs much slower over SSL, possibly because it makes a new connection for each request, whereas jsonrpclib and xmlrpclib leave the connection open for subsequent requests.

