C/C++ の HTTP Server

C/C++ で構築できる HTTP Server についてまとめた。

下記を参考にした。

qiita: C/C++アプリケーション組込みHTTPサーバの調査

C 言語 編

(1) libmicrohttpd

HTTP サーバーの Cライブラリ。 GNUプロジェクトにより開発されている。 ライセンスは、 GNU LGPL v2.1 。

gnu libmicrohttpd

ドキュメントとサンプルコードも充実している。

A tutorial for GNU libmicrohttpd

github: libmicrohttpd examples

Mac の場合は、brewコマンドでインストールできる。

homebrew libmicrohttpd

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/libmicrohttpd

(2) Mongoose

組み込みWEBサーバーの Cライブラリ。 1つのソースファイルと1つのヘッダファイルのライブラリ。 ライセンスは GPLv2 と商用版。

wikipedia: Mongoose (web server)

github:mongoose

ドキュメントとサンプルコードも充実している。

mongoose documentation

github:mongoose examples

マイコンへの組み込みが容易。

TCPスタックとして LWIPPicoTCP を選択できる。

サンプルコードには、 arduino esp8266 stm32 などのマイコンの例がある。

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/mongoose

(3) EmbeddableWebServer

組み込み向け WEB サーバーの Cライブラリ。 シングルヘッダオンリーの ライブラリ。 ライセンスは BSD 2-clause

github: EmbeddableWebServer

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/EmbeddableWebServer

(4) facil.io

TCP/IP 通信の Cライブラリ。

facil.io

github: facil.io

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/facil

(5) Socket

番外としてライブラリを使わないもの。

C言語にて ソケット関数を使って ウエブサーバを作成する

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/network

C++

(6) POCO

ネットワーク対応の C++クラスライブラリです。 HTTPサーバが含まれる。 ファイルシステムXMLパーサ、SQLデータベースなども含む。 Boost ライセンス。

POCO C++ Libraries

.wikipedia: POCO C++ Libraries

ドキュメントとサンプルコードも充実している。

POCO User Guides And Tutorials

github: POCO Net samples

Mac の場合は、brewコマンドでインストールできる。

homebrew: poco

下記の記事に使い方が解説されている。

codezine: POCO::Netライブラリによる組み込みWebサーバの実装

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/POCO

(7) Boost.Asio

Boost は様々な機能を持つ C++のライブラリです。 Boost.Asio は 非同期 I/OのC++のライブラリです。 Boost ライセンス。

Boost.Asio

wikipedia: Boost.Asio C++ library

ドキュメントとサンプルコードも充実している。

boost_asio reference

Boost逆引きリファレンス: ネットワーク TCP

github: boost asio example

Mac の場合は、brewコマンドでインストールできる。

homebrew: boost

Boost.Asio がサポートしているのは、TCP通信レベルです。 HTTP通信は開発者が記述する必要がある。

HTTP Server のサンプルコードがあるので、 簡単なものはすぐにできる。

github: boost asio example http server

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/boost_asio

(8) Boost.Beast

Boost.Beast は Boost.Asio 上に実装されたHTTPライブラリです。 Boost ライセンス。

Boost.Beast

ドキュメントとサンプルコードも充実している。

boost beasthttp

github boost beast example

Mac の場合は、brewコマンドでインストールできる。

homebrew: boost

下記の記事に使い方が解説されている。

C++のHTTPサーバ(boost::beast)を試す

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/boost_beast

(9) cpp-httplib

HTTPサーバ/クライアントの C++ライブラリです。 ヘッダオンリーのライブラリ。 MIT ライセンス

github cpp-httplib

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/cpp_httplib

(10) RESTinio

Asio 上に実装された非同期型のHTTPサーバーの C++14 ライブラリです。

github restinio

ドキュメントとサンプルコードが用意されている。

RESTinio documentation

github: restinio sample

Github にサンプルコードを公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/RESTinio