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&gtHello Wsapi!</p>")
      coroutine.yield("<p&gtPATH_INFO: " .. wsapi_env.PATH_INFO .. "</p>")
      coroutine.yield("<p&gtSCRIPT_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.