Lua - การเขียนโปรแกรมเว็บ

Lua เป็นภาษาที่มีความยืดหยุ่นสูงและมักใช้ในหลายแพลตฟอร์มรวมถึงเว็บแอปพลิเคชัน ชุมชน Kepler ที่ก่อตั้งขึ้นในปี 2004 เพื่อจัดหาส่วนประกอบเว็บโอเพนซอร์สใน Lua

แม้ว่าจะมีเว็บเฟรมเวิร์กอื่น ๆ ที่ใช้ Lua ที่ได้รับการพัฒนา แต่เราจะมุ่งเน้นไปที่ส่วนประกอบที่ชุมชน Kepler จัดเตรียมไว้เป็นหลัก

แอปพลิเคชันและกรอบงาน

  • Orbit เป็นเฟรมเวิร์กเว็บ MVC สำหรับ Lua โดยใช้ WSAPI

  • WSAPI เป็น API ที่แยกเซิร์ฟเวอร์โฮสต์เว็บจากเว็บแอปพลิเคชัน Lua และเป็นฐานสำหรับโครงการต่างๆ

  • Xavante เป็นเว็บเซิร์ฟเวอร์ Lua ที่มีอินเทอร์เฟซ WSAPI

  • Sputnik เป็น wiki / CMS ที่พัฒนาผ่าน WSAPI บน Kepler Project ที่ใช้เพื่ออารมณ์ขันและความบันเทิง

  • CGILuaเสนอการสร้างหน้าเว็บ LuaPages และ LuaScripts โดยใช้ WSAPI แต่ไม่รองรับอีกต่อไป ใช้ Orbit, Sputnik หรือ WSAPI แทน

ในบทช่วยสอนนี้เราจะพยายามทำให้คุณเข้าใจว่า Lua สามารถทำอะไรได้บ้างและหากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งและการใช้งานโปรดดูที่เว็บไซต์

วงโคจร

Orbit เป็นเว็บเฟรมเวิร์ก MVC สำหรับ Lua มันละทิ้งโมเดล CGILua ของ "สคริปต์" ไปใช้กับแอพพลิเคชั่นโดยสิ้นเชิงโดยที่แอพพลิเคชั่น Orbit แต่ละตัวสามารถใส่ในไฟล์เดียวได้ แต่คุณสามารถแบ่งออกเป็นหลายไฟล์ได้หากต้องการ

แอปพลิเคชัน Orbit ทั้งหมดเป็นไปตามโปรโตคอล WSAPI ดังนั้นปัจจุบันจึงทำงานร่วมกับ Xavante, CGI และ Fastcgi มันมีตัวเรียกใช้งานที่ทำให้ง่ายต่อการเปิดใช้งานอินสแตนซ์ Xavante สำหรับการพัฒนา

วิธีที่ง่ายที่สุดในการติดตั้ง Orbit คือการใช้ LuaRocks Luarocks install orbit เป็นคำสั่งสำหรับติดตั้ง สำหรับสิ่งนี้คุณต้องติดตั้งLuaRocksก่อน

หากคุณยังไม่ได้ติดตั้งการอ้างอิงทั้งหมดนี่คือขั้นตอนที่ต้องปฏิบัติตามเพื่อตั้งค่า Orbit ในสภาพแวดล้อม Unix / Linux

การติดตั้ง 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 สามารถแทนที่การกำหนดค่าในเครื่องได้

<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>

รีสตาร์ทเซิร์ฟเวอร์เพื่อให้แน่ใจว่าการเปลี่ยนแปลงมีผลบังคับใช้

ในการเปิดใช้งานแอปพลิเคชันของคุณคุณต้องเพิ่ม + ExecCGI ลงในไฟล์. htaccess ในรูทของแอปพลิเคชัน Orbit ของคุณ - ในกรณีนี้คือ / var / www.

Options +ExecCGI
DirectoryIndex index.ws

ตัวอย่างง่ายๆ - วงโคจร

#!/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

ตอนนี้คุณควรจะสามารถเปิดเว็บเบราว์เซอร์ของคุณได้ ไปที่ http: // localhost: 8080 / และคุณจะเห็นผลลัพธ์ต่อไปนี้ -

First Page

Orbit มีอีกทางเลือกหนึ่งคือ Lua code สามารถสร้าง html ได้

#!/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())

การสร้างแบบฟอร์ม

ตัวอย่างฟอร์มง่ายๆแสดงไว้ด้านล่าง -

#!/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

ดังที่ได้กล่าวไว้ก่อนหน้านี้ WSAPI ทำหน้าที่เป็นฐานสำหรับโครงการจำนวนมากและมีคุณลักษณะหลายอย่างฝังอยู่ คุณสามารถใช้ WSAPI และรองรับแพลตฟอร์มต่อไปนี้

  • Windows
  • ระบบที่ใช้ UNIX

เซิร์ฟเวอร์และอินเทอร์เฟซที่รองรับโดย WSAPI ประกอบด้วย

  • CGI
  • FastCGI
  • Xavante

WSAPI มีไลบรารีจำนวนมากซึ่งทำให้เราง่ายขึ้นในการเขียนโปรแกรมบนเว็บโดยใช้ Lua คุณสมบัติบางอย่างที่รองรับใน Lua ได้แก่

  • ร้องขอการประมวลผล
  • บัฟเฟอร์เอาต์พุต
  • Authentication
  • อัปโหลดไฟล์
  • ขอแยก
  • Multiplexing

ตัวอย่างง่ายๆของ WSAPI แสดงไว้ด้านล่าง -

#!/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

คุณสามารถเห็นในโค้ดด้านบนหน้า html แบบธรรมดาถูกสร้างขึ้นและส่งคืน คุณสามารถดูการใช้โครูทีนที่ทำให้สามารถส่งคืนคำสั่งโดยคำสั่งไปยังฟังก์ชันการโทร ในที่สุดรหัสสถานะ html (200) ส่วนหัวและหน้า html จะถูกส่งกลับ

Xavante

Xavante เป็นเว็บเซิร์ฟเวอร์ Lua HTTP 1.1 ที่ใช้สถาปัตยกรรมโมดูลาร์ตามตัวจัดการที่แมป URI ปัจจุบัน Xavante เสนอ

  • ตัวจัดการไฟล์
  • ตัวจัดการการเปลี่ยนเส้นทาง
  • ตัวจัดการ WSAPI

ตัวจัดการไฟล์ใช้สำหรับไฟล์ทั่วไป ตัวจัดการการเปลี่ยนเส้นทางเปิดใช้งานการแมป URI และตัวจัดการ WSAPI สำหรับการจัดการกับแอปพลิเคชัน WSAPI

ตัวอย่างง่ายๆแสดงไว้ด้านล่าง

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 การเรียกไปยัง xavante HTTP จะเปลี่ยนเป็นดังนี้ -

xavante.HTTP{
   server = {host = "*", port = 8080},
    
   defaultHost = {},
    
   virtualhosts = {
      ["www.sitename.com"] = simplerules
   }
}

Lua Web Components

  • Copasโปรแกรมเลือกจ่ายงานที่ใช้โครูทีนที่เซิร์ฟเวอร์ TCP / IP สามารถใช้ได้

  • Cosmoเครื่องมือ "เทมเพลตที่ปลอดภัย" ที่ปกป้องแอปพลิเคชันของคุณจากรหัสที่กำหนดเองในเทมเพลต

  • Coxpcall ห่อหุ้ม PCall ดั้งเดิมของ Lua และ xpcall ด้วยตัวที่เข้ากันได้กับโครูทีน

  • LuaFileSystemซึ่งเป็นวิธีแบบพกพาในการเข้าถึงโครงสร้างไดเร็กทอรีและแอตทริบิวต์ของไฟล์

  • Ringsห้องสมุดที่มีวิธีสร้างรัฐลัวะใหม่จากภายใน Lua

หมายเหตุสิ้นสุด

มีเว็บเฟรมเวิร์กและส่วนประกอบของ Lua มากมายให้เราเลือกและตามความต้องการก็สามารถเลือกได้ มีเว็บเฟรมเวิร์กอื่น ๆ ซึ่งรวมถึงสิ่งต่อไปนี้ -

  • Moonstalkช่วยให้การพัฒนามีประสิทธิภาพและการโฮสต์โครงการบนเว็บที่สร้างขึ้นแบบไดนามิกที่สร้างด้วยภาษา Lua ตั้งแต่หน้าพื้นฐานไปจนถึงแอปพลิเคชันที่ซับซ้อน

  • Lapisเฟรมเวิร์กสำหรับการสร้างเว็บแอปพลิเคชันโดยใช้ MoonScript (หรือ Lua) ที่ทำงานภายใน Nginx เวอร์ชันกำหนดเองที่เรียกว่า OpenResty

  • Lua Server Pagesปลั๊กอิน Lua Scripting Engine ที่กำจัดแนวทางอื่น ๆ ในการพัฒนาเว็บแบบฝังตัวนำเสนอทางลัดไปยังหน้าเซิร์ฟเวอร์ C แบบดั้งเดิม

กรอบงานเว็บเหล่านี้สามารถใช้ประโยชน์จากเว็บแอปพลิเคชันของคุณและช่วยคุณในการดำเนินการที่มีประสิทธิภาพ