Eric Appelt added the comment:

> 2b - I propose to take a simple protocol like Memcache or 
> Redis and simply implement it using the streams API.  We’ll only
> need two methods: set and get; and in the end we’ll teach the user
> how things really work and how to design async APIs.

I decided to make myself a test subject for this idea using Redis since 
although I use Redis a lot at work I've never looked at the underlying Redis 
protocol. I also haven't used the streams API in a long time, and never for 
anything other than simple exploration.

I worked on this the other night and found the Redis protocol simple enough to 
understand and was able to write a simple and somewhat clumsy client the other 
night with a bit of work: 
https://gist.github.com/appeltel/09d77eb489494ae1e2703933108cb60a

One thing that might be good about the Redis protocol for this purpose is that 
the parsing isn't completely trivial but it isn't overly complex either. For 
example, a response string can be given in either the simple format, which 
begins with a "+" byte and then terminates with "\r\n", or it can be in a 
binary safe format where a token of the form "$123\r\n" is sent first, 
signaling that the next 123 bytes are the result to be followed by another 
"\r\n" termination. There is also the sentinel value "$-1\r\n" which may signal 
an unset key. Thus the string "foo" might be sent as "+foo\r\n" or 
"$3\r\nfoo\r\n".

So I think this can be reasonably described in a few brief paragraphs and it is 
much more interesting (to me) than an echo client/server example.

The tutorial should probably also include a link to a rudimentary server 
implementation of an in-memory key/value store implementing the Redis protocol 
and supporting just GET and SET, as the reader may not be able to easily stand 
up Redis for a variety of reasons or lack of knowledge.

I can experiment with memcached as well but I think this proposal is a good 
idea and would work well with Redis.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30145>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to