

HTTPKit — A lightweight HTTP server framework for Objective-C - fyolnish
https://github.com/fjolnir/HTTPKit

======
jawngee
There is also: <https://github.com/robbiehanson/CocoaHTTPServer>

This works on Cocoa an iOS and supports:

    
    
        - Built in support for bonjour broadcasting
        - IPv4 and IPv6 support
        - Asynchronous networking using GCD and standard sockets
        - Password protection support
        - SSL/TLS encryption support
        - Extremely FAST and memory efficient
        - Extremely scalable (built entirely upon GCD)
        - Heavily commented code
        - Very easily extensible
        - WebDAV is supported too!
    

(Not the author, just a user).

~~~
fyolnish
HTTPKit does support WebDAV, Auth & SSL. But CocoaHTTPServer looks nice as
well.

------
salimmadjd
The OP also created a language on top of objective-C. Although I have no
interest to learn any more languages, I have to applaude him. Objective-C
could be clunky and his language Tranquil, takes some of the productivity of
newer languages we've come to expect. Very cool!

~~~
spearo77
They also submitted it to HN a few months ago, but didn't get any comments –
<http://news.ycombinator.com/item?id=4386177>

------
sentinel
Could this be used as a method of communicating with an iOS device as if it
were a server (e.g. sending updates from a real server to the iOS client
(which now behaves like a server))? Somewhat of a replacement for
notifications, perhaps?

~~~
brendn
I used Mongoose [1] to do exactly that for devices that share a local network
(auto-discovery and everything). So yes, it's definitely possible :)

[1] <http://code.google.com/p/mongoose/>

------
brendn
I would love to see a LUA scripting framework built into this. I built an iOS
app with an embedded web server, and dealing with dynamic text generation in
Objective-C is a pain.

~~~
fyolnish
You'd be interested in one of my other projects, TLC then :) It's an
objective-c bridge for lua, with which httpkit will work out of the box

<https://github.com/fjolnir/TLC>

~~~
brendn
I'll have to try it out. Thanks!

------
zachwill
Really cool, OP. Looking forward to reading through this more thoroughly
tomorrow, but I'm a big fan of these types of small side projects.

------
whalesalad
Can someone please explain the point of something like this? it's so verbose.

~~~
Zev
Maybe the author had a need for it, built it, and is throwing it out there for
anyone else who might have a similar need? Maybe you need to embed a web
server in your app for something? Maybe you're really comfortable with ObjC
and just want to get a quick server up for prototyping? Maybe you don't find
it to be too verbose, and prefer having code that's easily self-documenting
instead of relying on framework knowledge? Maybe you like being able to use a
framework like Foundation (which has had 20+ years of history)? And so on.

~~~
whalesalad
Everything you've mentioned could possibly be a decent reason for this beast.
I'd just love to hear what they were. You make something like this for one of
two reasons.

1) you've got a lot of spare time on your hands and wanted to test your skills
and show your love for a language. Based on the outlandish hello world example
(which is useless for most web developers), this is most likely.

2) you had some ridiculous constraints and really absolutely had to build a
web sever in objective-c. In this case, a better use case or example would be
appreciated.

~~~
mpweiher
3) You think that having a common language for all parts of your project could
be an advantage, for example sharing your model code. Especially valuable if
you've decoupled your model from your delivery framework like Uncle Bob told
you ...;-)
[http://www.confreaks.com/videos/759-rubymidwest2011-keynote-...](http://www.confreaks.com/videos/759-rubymidwest2011-keynote-
architecture-the-lost-years)

4) You find that the very _small_ amount of spare time this sort of thing
takes is worth it, even if just for kicks.

5) You miss WebObjects.

6) In addition to having code commonality, you might be interested in
performance that allows you to not have to worry about scaling out for much
much longer than other common solutions (or requiring rewrites if you're
successful). For example, my own embedded Objective-C web lib (based on
libmicrohttp) clocks in at around 30K requests/second even when initialized
via script on my laptop, whereas something like Sinatra does around 900.

[http://blog.metaobject.com/2012/03/30k-requests-aka-wrk-
is-f...](http://blog.metaobject.com/2012/03/30k-requests-aka-wrk-is-fast.html)

[http://blog.metaobject.com/2011/12/ruby-and-rails-
scalabilit...](http://blog.metaobject.com/2011/12/ruby-and-rails-
scalability.html)

7) You think textual verbosity is a good thing when it adds to readability.

8) You want to embed a web-server in your iOS and/or MacOS X app. Peer to
peer, like the Internet was originally intended. While it may be possible to
achieve with RoR or Sinatra or the like, an ObjC lib is just less hassle.

~~~
nspragmatic
> 5) You miss pre-v.5 WebObjects

FTFY :)

~~~
mpweiher
Thanks! Exactly what I meant :)

In other words: there was a WebObjects after v4? ;-)

------
pjmlp
How well is it supported outside Mac OS X?

~~~
mpweiher
It should/will obviously also work on iOS, and using an Objective-C web-
framework, your iOS device actually performs comparably to Ruby running on big
iron. Imagine a server rack filled with old iPhones, or maybe a "server desk
drawer" :-)

While I don't know about this kit in particular, I've had good results with
both Cocotron and GNUStep in getting ObjC/Cocoa code to Linux and Windows.

Recently, I also had some Objective-C code running on my Android phone, but
that sort of thing is experimental and not well-supported yet.

~~~
pjmlp
My tools have to be usable in all OS my customers require me to work on, hence
my question.

~~~
mpweiher
What other OSes do you require? GNUStep lists various BSDs, various Linuxes,
HP/UX, Solaris, Windows and some embedded systems:

<http://wiki.gnustep.org/index.php/Platform_compatibility>

I also had a large-ish system running on AIX.

~~~
pjmlp
Currently I only do job related work in C++, JVM and .NET.

Never looked too much into GNUStep, because it is not clear to me how far
Cocoa and the latest language changes from Apple are supported by gcc and
clang + GNUStep.

On my line of work it is the customers that decide the technology, not me, so
they have a hard time thrusting Objective-C outside Apple's environment.

------
carlhblomqvist
Neat, I like it!

