Like answered before the best choice is to use a 3rd party library for this. There exist mainly two libraries to get the job done: CocoaHTTPServer and MongooseDaemon.
Both of them have an Objective-C API but MongooseDaemon is just a wrapper around the Mongoose HTTP server written in plain c, whereas CocoaHTTPServer is completely written in Objective-C.
We decided to go with CocoaHTTPServer because of a few simple reasons:
- Even the simplest property like setting the document directory for the HTTP server does not exist in MongooseDaemon. You have to change a
#define
in an included source file to be able to change it from the default one, which points to NSHomeDirectory()
.
- As of now the MongooseDaemon library contains warnings about deprecated methods used within the Objective-C wrapper.
- CocoaHTTPServer is aware of things like Bonjour or WebDav whereas Mongoose just delivers the basics.
- CocoaHTTPServer comes with many examples that range from simple HTTP servers, passwd, SSL/TLS or WebDav HTTP server.
- CocoaHTTPServer works with GCD to enable multithreading.