Luaによるネットワークプログラミングの基本例
Luaは柔軟性の高い言語であり、Webアプリケーションをはじめ、マルチプラットフォームで使用されることが多い。2004年に設立されたKeplerコミュニティは、LuaのWebコンポーネントのオープンソースコードを提供しています。
Luaを使用して開発されたWebフレームワークは他にもありますが、ここでは主にKeplerコミュニティが提供するコンポーネントに焦点を当てます。
アプリ・フレームワーク
- OrbitはWSAPIをベースとしたluaのMVCウェブフレームワークです。
- WSAPIは、LuaのWebアプリケーションを抽象化したWebホストサーバで、多くのプロジェクトのAPIをベースにしています。
- XavanteはWSAPIインターフェイスを提供するLua用Webサーバーです。
- SputnikはWSAPI Keplerプロジェクトで開発されたWiki/CMSで、楽しくて愉快なものです。
- CGILuaはWSAPIをベースにしたLuaPagesとLuaScriptsのウェブオーサリングを提供しますが、サポートは終了しています。代わりに Orbit、Sputnik、WSAPI を使ってください。
このチュートリアルでは、Luaのインストールや使い方など、より多くのことができるようにするため、ケプラー社のウェブサイトを参照してください
軌道
Orbitは、luaのMVCウェブフレームワークです。CGILuaアプリケーションを完全に捨て、各アプリケーションOrbitはCGILuaモードで1つのファイル"script"を保持できますが、必要なら複数のファイルに分割することも可能です。
すべてのOrbitアプリケーションはWSAPIプロトコルに従っているので、現在Xavante、CGI、FastCGIと連動して動作しています。開発用のXavanteインスタンスを簡単にロールアウトできるランチャーが付属しています。
Orbitをインストールする最も簡単な方法は、LuaRocksを使用することです。luarocksはOrbitのインストールコマンドをインストールします。このためには、まず最初にLuaRocksをインストールする必要があります。
すべての依存関係がインストールされていない場合、これはUnix/Linux環境でOrbitをセットアップするためのステップです。
Apacheのインストール
サーバーに接続します。Apache2、それがサポートするモジュール、必要な Apache2 モジュールを使用する機能をインストールします。
$ sudo apt-get install apache2 libapache2-mod-fcgid libfcgi-dev build-essential
$ sudo a2enmod rewrite
$ sudo a2enmod fcgid
$ sudo /etc/init.d/apache2 force-reload
LUAROCKSのインストール
$ sudo apt-get install luarocks
WSAPI、FCGI、ORBIT、XAVANTEをインストールします。
$ sudo luarocks install orbit
$ sudo luarocks install wsapi-xavante
$ sudo luarocks install wsapi-fcgi
APACHE2の作成
$ sudo raj /etc/apache2/sites-available/default
設定ファイルの以下の <Directory /var/www/> セクションに追加してください。このセクションに "AllowOverride None" がある場合、htaccess ファイルが設定を上書きできるように、 "None" を "All" に変更する必要があります。
AddHandler fcgid-script .lua
AddHandler fcgid-script .ws
AddHandler fcgid-script .op
FCGIWrapper "/usr/local/bin/wsapi.fcgi" .ws
FCGIWrapper "/usr/local/bin/wsapi.fcgi" .lua
FCGIWrapper "/usr/local/bin/op.fcgi" .op
#FCGIServer "/usr/local/bin/wsapi.fcgi" -idle-timeout 60 -processes 1
#IdleTimeout 60
#ProcessLifeTime 60
</IfModule>
サーバーを再起動して、変更が有効になったことを確認します。
アプリケーションをアクセス可能にするには、htaccessファイルでOrbitアプリケーションのルートに+ ExecCGIを追加する必要があります - この場合、/var/wwwに設定します。
DirectoryIndex index.ws
簡単な例 - オービット
-- index.lua
require"orbit"
-- declaration
module("myorbit", package.seeall, orbit.new)
-- handler
function index(web)
return my_home_page()
end
-- dispatch
myorbit:dispatch_get(index, "/", "/index")
-- Sample page
function my_home_page()
return [[
<head></head>
<html>
<h2>First Page</h2>
</html>
]]
end
これで、ウェブブラウザを起動し、http://localhost:8080/ にアクセスすると、次のように表示されるはずです。
Orbitはもう一つの選択肢として、htmlを生成するLuaのコードを提供しています。
-- index.lua
require"orbit"
function generate()
return html {
head{title "HTML Example"},
body{
h2{"Here we go again!"}
}
}
end
orbit.htmllify(generate)
print(generate())
フォームの作成
簡単なフォームの例を以下に示します。
require"orbit"
function wrap (inner)
return html{ head(), body(inner) }
end
function test ()
return wrap(form (H'table' {
tr{td"First name",td( input{type='text', name='first'})},
tr{td"Second name",td(input{type='text', name='second'})},
tr{ td(input{type='submit', value='Submit!)
td(input{type='submit', value='Cancel'})
},
}))
end
orbit.htmllify(wrap,test)
print(test())
公式サイトには長い軌道のチュートリアルがあります
ワサピ
前述の通り、WSAPIは多くのプロジェクトによって組み込まれた複数の機能の基盤として機能しています。WASAPIは、以下のプラットフォームで使用でき、サポートしています。
- Windows
- UNIX系システム
WSAPIでサポートされているサーバーとインターフェースは以下の通りです。
- CGI
- FastCGI
- ザバンテ
WSAPIでは、Luaを使用したライブラリを多数提供しており、Web上でのプログラミングを容易にすることができます。Luaでサポートされている機能には、以下のようなものがあります。
- リクエスト処理
- 出力バッファリング
- 認証
- ファイルのアップロード
- リクエストの分離
- 多重化
WSAPIの簡単な例を以下に示します。
module(... , package.seeall)
function run(wsapi_env)
local headers = { ["Content-type"] = "text/html" }
local function hello_text()
coroutine.yield("<html><body>")
coroutine.yield("<p>Hello Wsapi!</p>")
coroutine.yield("<p>PATH_INFO: " . wsapi_env.PATH_INFO . "</p>")
coroutine.yield("<p>SCRIPT_NAME: " . wsapi_env.SCRIPT_NAME . "</p>")
coroutine.yield("</body></html>")
end
return 200, headers, coroutine.wrap(hello_text)
end
上のコードに戻ると、簡単なHTMLページの構成で見ることができます。連結を使用することで、returnステートメントで関数を呼び出すことが可能であることがわかります。最終的なHTMLのステータスコード(200)、ヘッダー、HTMLページの戻り値です。
ザバンテ
Xavante は Lua1.1 HTTP Web サーバーマッピングハンドラーで、モジュラー URI ベースのアーキテクチャを採用しています。Xavanteは現在、以下の機能を提供しています。
- ファイルハンドラ
- リダイレクトハンドラ
- WSAPIハンドラ
ファイルハンドラは一般的なファイルに対して使用されます。リダイレクトハンドラは、WSAPIアプリケーションでURIのリマッピングとWSAPIハンドラを有効にします。
簡単な例を以下に示します。
require "xavante.cgiluahandler"
require "xavante.redirecthandler"
-- Define here where Xavante HTTP documents scripts are located
local webDir = XAVANTE_WEB
{ -- URI remapping example
match = "^[^%. /]*/$",
with = xavante.redirecthandler,
params = {"index.lp"}
},
{ -- cgiluahandler example
match = {"%.lp$", "%.lp/. *$", "%.lua$", "%.lua/. *$" },
with = xavante.cgiluahandler.makeHandler (webDir)
},
{ -- filehandler example
match = ". ",
with = xavante.filehandler,
params = {baseDir = webDir}
},
}
xavante.HTTP{
server = {host = "*", port = 8080},
defaultHost = {
rules = simplerules
},
}
Xavanteのバーチャルホストを使用するには、xavante.HTTPの呼び出しは次のようになります。
server = {host = "*", port = 8080},
defaultHost = {},
virtualhosts = {
["www.sitename.com"] = simplerules
}
}
Luaウェブコンポーネント
- Copasは、コンカレントスケジューラに基づいて、TCP/IPプロトコルでサーバーを使用することができます。
- Cosmoは、アプリケーションのテンプレートに任意のコードが含まれることを防ぐ、quot;secure template"エンジンです。
- Coxpcall Luaは、ネイティブのpcallとxpcallを並行処理互換性を持ってラップしています。
- LuaFileSystem:基盤となるディレクトリ構造とファイルプロパティにアクセスするためのポータブルな方法です。
- Rings:Luaの中から新しいLuaの状態を作成する方法を提供するライブラリです。
注意事項
LuaベースのWebフレームワークやコンポーネントは非常に多く、必要に応じて、オプションとして利用することが可能です。他にも、以下のような利用可能なWebフレームワークがあります。
- Moonstalkは、基本的なWebページから複雑なアプリケーションまで、Luaで構築された動的に生成されるWebベースのプロジェクトを効率的に開発し、ホストすることができます。
- MoonScript (または LUA) でウェブアプリケーションを構築するためのフレームワークである Lapis は、OpenResty という Nginx のカスタムバージョンで動作します。
- Luaサーバーページ、Luaスクリプトエンジンのプラグインは、従来のCサーバーページへの劇的なショートカットを提供するWeb開発を組み込むための他の任意の方法です。
これらのWebフレームワークは、Webアプリケーションを活用し、強力なオペレーションを行うのに役立ちます。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン