John, My server uses epoll( ) and runs non-blocking in a single thread. I did some google and found out that people who need a very fast server that is highly scalable are using this model. non-blocking seems to be more complicated at first glance but it actually makes the server design much simpler. I am planning to release my code as open source when it is more complete.
Thanks, -Alex On Tue, Jun 10, 2008 at 8:48 PM, John Stanton <[EMAIL PROTECTED]> wrote: > We use an application server I wrote which handles HTTP, serves file and > has embedded Sqlite for the RPCs. The RPC can deliver its result either > in XML for widely distributed applications or as JSON if it is > responding to a WWW browser in AJAX mode. > > We keep a local library of SQL RPCs so that SQl never appears on the > network and we have immunity from injection attacks. It also means that > we can cache compiled SQL, a useful performance win. > > We use the Expat parser in remote programs using the XML format. A > wrapper makes it a verifying parser to ensure well formed XML. > > The server is multi threaded and maintains a pool of live threads so it > can respond quickly and assign multiple threads to one browser > connection. Shared cache in Sqlite and some extra caching to maintain > multiple open databases and results makes Sqlite behave like a simple to > use enterprise DB server, but without the overhead of extra processes. > We use mutexes for synchronization, set up as read and write locks and > avoid the POSIX file locks. > > We installed Javascript as a procedural language to be used by Sqlite > instead of PL/SQL but that is not a great success (v. slow) and we are > going to experiment with using Python. > > Based on our experience you should be very happy with your Sqlite based > RPC capability. > > Alex Katebi wrote: > > John & John, > > > > Actually my API used to be XML using SCEW a DOM like XML parser that > uses > > Expat. > > > > For my particular application RPC made more sense to me. What could be > > easier than a function call? Another advantage was that I did not have to > > create any functions. I am just using SQLite's C API. Now the users of my > > application can query any table on the server side using select. Since my > > application is a network server, and network debugging capability is > > crucial. > > The only ugliness is that select locks the tables. I wish D. Hipp would > give > > us an option for pStmt to create a temporary table of the select result > set > > and delete that temp table after finalize automatically. This way a > client > > can sit on a prepare/step for a long time. > > > > I solved the endian issue pretty easy by sending the type code. > > > > Thanks, > > -Alex > > > > > > On Tue, Jun 10, 2008 at 3:07 PM, John Elrick <[EMAIL PROTECTED]> > > wrote: > > > >> Alex Katebi wrote: > >>> Yes I need to do it as 8 byte buffer. Convert the endianess to the > >> network > >>> then back to host for 8 byte integer. > >>> I think XML is great for command validation and CLI auto typing, help > >> etc. > >>> Besides parsing issue, XML can not handle binary data directly. > >>> > >> As John pointed out, XML is not intended to handle binary data > >> directly. We use XML as a transfer medium for binary data and simply > >> base64 encode it before encapsulation. > >> > >> > >> John Elrick > >> Fenestra Technologies > >> _______________________________________________ > >> sqlite-users mailing list > >> sqlite-users@sqlite.org > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > >> > > _______________________________________________ > > sqlite-users mailing list > > sqlite-users@sqlite.org > > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users