Latest on twitter:

Introducing Kelpie

dhotson:

So call me crazy.. but I thought it would be a good idea to write a little web server in PHP.

I’d like to think that it’s fast, lightweight and hard working. :-)

Ok, show me the code

  1 class HelloWorld
2 {
3 public function call($env)
4 {
5 return array(
6 200,
7 array("Content-Type" => "text/plain"),
8 array("hello world")
9 );
10 }
11 }

This is what a simple Kelpie web app looks like.

The call method accepts an array of CGI like environment variables and returns an array of 3 items:

  • Status code
  • Headers as array(key => value)
  • Body text as an array (or Iterator) of strings
  • To actually run a Kelpie app, you need to start up a server:

      1 $server = new Kelpie_Server('0.0.0.0', 8000);
    2 $server->start(new HelloWorld());

    There’s not really much more to it at the moment, I’m hoping to build a more fully featured framework on top of this.

    For now I’m just having fun dabbling in writing server apps. :-D

    Credits

    I can’t really claim much credit I’m afraid, I haven’t really done anything original here.

    Most of the code is based on the Ruby Thin web server. I also copied the Rack web server interface as you may have noticed. ;-)

    I started out this project by writing a PHP extension for the Mongrel http parser.
    The httpparser PHP extension code is based on this tutorial and I also used the Python bindings as a guide. It could really do with some code review, my C is a bit rusty..

    Download

    The code is @ github. Feedback is welcome.



    OMG, puppies!!1!

    Really neat. I was going to mention how similar it looks like Rack!

  • thoughtjar reblogged this from dhotson and added:
    crazy. Considering...PHP isn’t meant for this sort...sort of...
  • bdotdub reblogged this from dhotson and added:
    mention how similar it
  • pims reblogged this from dhotson
  • dhotson posted this
  • -->
    blog comments powered by Disqus