Opinions, please: Repository module

holger krekel pyth at devel.trillke.net
Sun Jan 5 20:21:56 EST 2003


andy wrote:
> Ok, I know I'm going out on a limb here: forum newbie who no-one knows ;-) ...
> 
> I'm working on a little project - for my kids, actually - and I had a need to 
> code a module to provide a 'central network place to store miscellaneous 
> stuff'.  No security or reliablility assurance is required either.  
> 
> I googled for an existing module, but found none simple enough (got lots of 
> interesting stuff about distributed processing systems and so on though)...
> 
> Initially, I thought "ok, just use a shared directory".  Tried that, but the 
> latency was *way* too severe, and unpredictable, even on my little 100mb 
> network.
> 
> I realised I was going to have to bite the bullet and learn to use sockets.  I 
> was off work for the christmas break, 9 days or so, and spent much of this 
> time digging, until I was totally googled out.  
> 
> After a bit of a tough learning curve (things not working as I expected them 
> to etc.) I now have a working 'prototype'.
> 
> So, what I want to know is - Is anyone interested in trying it out? I'd like 
> some (hopefully constructive) comments, but not really along the lines of 
> 'you should have used x, y or z library bacause lah lah lah', more on doing 
> what I'm doing better.

I am interested but might take some time to review your code (that
depends obviously :-).  I understand your intention and think it is perfectly
fine to go for a totally simple solution.  

> It uses sockets, and is loosely based on an old chat-server example by J. 
> Strout (www.strout.net), so it uses a round-robin approach, with the sockets 
> in non-blocking mode.  I specifically wanted to code this myself, pig-headed 
> that I am, to learn a bit of the practicalities of socket programming; yes I 
> know I could have used SocketServer, Twisted or any number of other modules 
> hanging round there in cyberspace.  However, as I said, I wanted to know how 
> it worked from the /inside/.
> 
> My solution is not that elegant yet (I'm working on that though) but it does 
> seem to work ok; it's as fast as I need it and it takes minimal cpu - hardly 
> noticeable on my Linux PII/300.
> 
> What it does:
> 
> Sets up a socket.
> Listens on it.
> Sets it to non-blocking mode.
> Loops forever:
> 	checks for any new connections;
> 		stores them in a connection list.
> 	iterates the connetction list:
> 		checks for any incoming data on each connection
> 			processes each request and returns a result
> 
> Requests come in as a clear-text dictionary:
> 	{"request":"...","keys":{"k":v...}}
> 
> 	These are evaluated (for convenience) by eval().  Yes, I know this is risky,
> 	but it' easy, ok.

sounds quite ok.  Don't mind all these people who trade security for
freedom&fun :-)

> Response returned as the original incoming key with 'comments':
> 	# successful request
> 	'{"request":"...","response":"ok","keys":{"k":v...}}  '
> 	- or -
> 	# failed request
> 	'{"request":"...","response":"no","reason":"error string","keys":{"k":v...}}'
> 
> So far only two requests are supported:
> 
> 	"set" - sets key values
> 	"query" - queries key values
> 
> The key values are stored in a dictionary by the server.
> 
> I'm going to have to clean the code up a lot before I can post it.  
> 
> I just /bet/ someone is going to tell me now that there's already something 
> out there which does exactly this :-(
> 
> Anyway, anyone interested?

Yes, if it is at most four screens of simple code :-)

regards,

    holger





More information about the Python-list mailing list