Lua - Web Programlama
Lua oldukça esnek bir dildir ve genellikle web uygulamaları dahil olmak üzere birden fazla platformda kullanılır. Lua'da açık kaynaklı web bileşenleri sağlamak için 2004 yılında kurulan Kepler topluluğu.
Lua'yı kullanan geliştirilmiş başka web çerçeveleri olsa da, öncelikle Kepler topluluğu tarafından sağlanan bileşenlere odaklanacağız.
Uygulamalar ve Çerçeveler
Orbit Lua için WSAPI tabanlı bir MVC web çerçevesidir.
WSAPI Lua web uygulamalarından web barındırma sunucusunu soyutlayan ve birçok projenin temelini oluşturan API'dir.
Xavante WSAPI arabirimi sunan bir Lua Web sunucusudur.
Sputnik mizah ve eğlence için kullanılan Kepler Projesi üzerinde WSAPI üzerinden geliştirilen bir wiki / CMS'dir.
CGILuaLuaPages ve LuaScripts web sayfası oluşturma olanağı sunar, WSAPI tabanlı ancak artık desteklenmemektedir. Bunun yerine Orbit, Sputnik veya WSAPI kullanın.
Bu eğitimde, Lua'nın neler yapabileceğini anlamanıza ve kurulumu ve kullanımı hakkında daha fazla bilgi sahibi olmanızı sağlamaya çalışacağız, web sitesine bakın.
Yörünge
Orbit, Lua için bir MVC web çerçevesidir. Her bir Orbit uygulamasının tek bir dosyaya sığabileceği, ancak isterseniz onu birden çok dosyaya bölebilirsiniz.
Tüm Orbit uygulamaları WSAPI protokolünü takip eder, bu nedenle şu anda Xavante, CGI ve Fastcgi ile çalışırlar. Geliştirme için bir Xavante örneğini başlatmayı kolaylaştıran bir başlatıcı içerir.
Orbit'i kurmanın en kolay yolu LuaRocks kullanmaktır. Luarocks install orbit, kurulum komutudur. Bunun için önce LuaRock'ları kurmanız gerekir .
Tüm bağımlılıkları kurmadıysanız, Orbit'i Unix / Linux ortamında kurmak için izlenecek adımlar burada verilmiştir.
Apache'yi Kurmak
Sunucunuza bağlanın. Apache2'yi, destek modüllerini kurun ve gerekli Apache2 modüllerini şunu kullanarak etkinleştirin -
$ 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'u yükleyin
$ sudo apt-get install luarocks
WSAPI, FCGI, Orbit ve Xavante'yi yükleyin
$ sudo luarocks install orbit
$ sudo luarocks install wsapi-xavante
$ sudo luarocks install wsapi-fcgi
Apache2'yi kurma
$ sudo raj /etc/apache2/sites-available/default
Aşağıdaki bu bölümü, yapılandırma dosyasının <Directory / var / www /> bölümünün altına ekleyin. Bu bölümde 'İzin Verme Yok' varsa, o zaman 'Yok'u' Tümü 'olarak değiştirmeniz gerekir, böylece .htaccess dosyası yapılandırmayı yerel olarak geçersiz kılabilir.
<IfModule mod_fcgid.c>
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>
Yapılan değişikliklerin yürürlüğe girmesini sağlamak için sunucuyu yeniden başlatın.
Uygulamanızı etkinleştirmek için Orbit uygulamanızın kökünde bir .htaccess dosyasına + ExecCGI eklemeniz gerekir - bu durumda / var / www.
Options +ExecCGI
DirectoryIndex index.ws
Basit Örnek - Orbit
#!/usr/bin/env index.lua
-- 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
Şimdi, web tarayıcınızı başlatabilmelisiniz. Http: // localhost: 8080 / adresine gidin ve aşağıdaki çıktıyı görmelisiniz -
First Page
Orbit başka bir seçenek sunar, yani Lua kodu html oluşturabilir.
#!/usr/bin/env index.lua
-- index.lua
require"orbit"
function generate()
return html {
head{title "HTML Example"},
body{
h2{"Here we go again!"}
}
}
end
orbit.htmlify(generate)
print(generate())
Form Oluşturma
Aşağıda basit bir form örneği gösterilmektedir -
#!/usr/bin/env index.lua
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.htmlify(wrap,test)
print(test())
WSAPI
Daha önce de belirtildiği gibi, WSAPI birçok projenin temelini oluşturur ve içinde birden çok özelliğe sahiptir. WSAPI kullanabilir ve aşağıdaki platformları destekleyebilirsiniz:
- Windows
- UNIX tabanlı sistemler
WSAPI tarafından desteklenen sunucular ve arayüzler şunları içerir:
- CGI
- FastCGI
- Xavante
WSAPI, Lua kullanarak web programlamada işimizi kolaylaştıran bir dizi kitaplık sağlar. Lua'da desteklenen özelliklerden bazıları şunları içerir:
- İşleme isteği
- Çıktı tamponlama
- Authentication
- Dosya yüklemeleri
- İzolasyon isteyin
- Multiplexing
Basit bir WSAPI örneği aşağıda gösterilmiştir -
#!/usr/bin/env wsapi.cgi
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
Yukarıdaki kodda basit bir html sayfasının oluşturulduğunu ve geri döndüğünü görebilirsiniz. Fonksiyonu çağıran ifadeye göre ifade döndürmeyi mümkün kılan coroutinlerin kullanımını görebilirsiniz. Son olarak html durum kodu (200), başlıklar ve html sayfası döndürülür.
Xavante
Xavante, URI eşlenmiş işleyicileri temel alan modüler bir mimari kullanan bir Lua HTTP 1.1 Web sunucusudur. Xavante şu anda şunları sunuyor:
- Dosya işleyici
- Yönlendirme işleyicisi
- WSAPI işleyicisi
Dosya işleyicisi genel dosyalar için kullanılır. Yeniden yönlendirme işleyicisi, WSAPI uygulamalarıyla işlemek için URI yeniden eşlemeyi ve WSAPI işleyicisini etkinleştirir.
Aşağıda basit bir örnek gösterilmektedir.
require "xavante.filehandler"
require "xavante.cgiluahandler"
require "xavante.redirecthandler"
-- Define here where Xavante HTTP documents scripts are located
local webDir = XAVANTE_WEB
local simplerules = {
{ -- 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 ile sanal konakları kullanmak için xavante.HTTP çağrısı aşağıdaki gibi değiştirilecektir -
xavante.HTTP{
server = {host = "*", port = 8080},
defaultHost = {},
virtualhosts = {
["www.sitename.com"] = simplerules
}
}
Lua Web Bileşenleri
Copas, TCP / IP sunucuları tarafından kullanılabilen eşgüdümlere dayalı bir dağıtıcı.
Cosmo, uygulamanızı şablonlarda rastgele kodlardan koruyan bir "güvenli şablonlar" motoru.
Coxpcall Lua yerel pcall ve xpcall'ı coroutine uyumlu olanlarla kapsüller.
LuaFileSystem, temeldeki dizin yapısına ve dosya özniteliklerine erişmenin taşınabilir bir yolu.
RingsLua'nın içinden yeni Lua eyaletleri yaratmanın bir yolunu sağlayan bir kütüphane.
Bitiş Notu
Bizim için çok sayıda Lua tabanlı web çerçevesi ve bileşeni mevcuttur ve ihtiyaca göre seçilebilir. Aşağıdakileri içeren başka web çerçeveleri vardır:
MoonstalkLua dili ile oluşturulan dinamik olarak oluşturulmuş web tabanlı projelerin verimli bir şekilde geliştirilmesini ve barındırılmasını sağlar; temel sayfalardan karmaşık uygulamalara.
Lapis, OpenResty adlı özelleştirilmiş bir Nginx sürümünün içinde çalışan MoonScript (veya Lua) kullanarak web uygulamaları oluşturmak için bir çerçeve.
Lua Server Pagesgömülü web geliştirmeye yönelik diğer tüm yaklaşımları ortadan kaldıran bir Lua betik motoru eklentisi, geleneksel C sunucusu sayfalarına çarpıcı bir kısa yol sunar.
Bu web çerçeveleri, web uygulamalarınızdan yararlanabilir ve güçlü işlemler yapmanıza yardımcı olabilir.