[clojure]HTTP kitを使ってHTTPサーバとHTTPクライアントを作成
HTTP kitとは
HTTP kitとは、ringと互換性がある、Clojure用HTTPクライアント/サーバライブラリです。 このサーバは通常のHTTPサーバとしてだけでなく、WebSocketの/HTTPロングポーリング/ストリーミングのためのAPIも用意しています。 セットアップはLeiningenを使えば簡単に行うことができます。今回は簡単なサーバ/クライアントサンプルを作成してみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Clojure : 1.5.1
- Leiningen : 2.1.2
サンプルを動かす
まずはleinでプロジェクトを作成しましょう。
% lein new mykit
次に、project.cljを変更し、lein depsコマンドで依存ライブラリを取得します。 project.cljは:dependenciesと:mainを記述します。
(defproject mykit "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :dependencies [[org.clojure/clojure "1.5.1"] [http-kit "2.0.0"]] :main mykit.core)
HTTPサーバを起動させるための記述をsrc/mykit/core.cljに下記記述を行います。 8080番ポートでアクセスすると、文字列を返すだけの単純なHTTPサーバです。
(ns mykit.core (:use [org.httpkit.server :only [run-server]]) (:require [org.httpkit.client :as kithttp])) (defn app [req] {:status 200 :headers {"Content-Type" "text/html"} :body "hello HTTP kit!"}) (defn -main [& args] (run-server app {:port 8080}) (println (str "Server started. listen at localhost@8080")))
lein runコマンドでサーバを起動しましょう。ブラウザでhttp://localhost:8080にアクセスすることができるようになります。
% lein run Server started. listen at localhst@8080
次はクライアント用ライブラリを使ってみます。 サーバを起動したままで、別コンソールを起動し、lein replコマンドを入力してREPLを起動しましょう。
% cd /path/your/mykit % lein repl
get関数をつかってサーバにアクセスしてみます。サーバから結果が返ってきますね。
mykit.core=> (kithttp/get "http://localhost:8080" (fn [{:keys [status headers body error]}] (println body))) hello HTTP kit!
まとめ
今回はHTTP kitを使用して、単純なHTTPサーバ/クライアントの動作を試してみました。 このライブラリは、Websocketも動かすことができるようなので、いろいろできそうですね。