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>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 แบบธรรมดาถูกสร้างขึ้นและส่งคืน คุณสามารถดูการใช้โครูทีนที่ทำให้สามารถส่งคืนคำสั่งโดยคำสั่งไปยังฟังก์ชันการโทร ในที่สุดรหัสสถานะ 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 แบบดั้งเดิม
กรอบงานเว็บเหล่านี้สามารถใช้ประโยชน์จากเว็บแอปพลิเคชันของคุณและช่วยคุณในการดำเนินการที่มีประสิทธิภาพ