Trang chủ
Bài 22 : Lua và lập trình Webs
Bài 22 : Lua và lập trình Webs
Lua – Lập trình Web Trang trướcTrang tiếp theo Lua là một ngôn ngữ có tính linh hoạt cao và […]
Lua – Lập trình Web
Lua là một ngôn ngữ có tính linh hoạt cao và nó thường được sử dụng trên nhiều nền tảng bao gồm các ứng dụng web. Cộng đồng Kepler được thành lập vào năm 2004 để cung cấp các thành phần web mã nguồn mở trong Lua.
Mặc dù có những web framework khác sử dụng Lua đã được phát triển, chúng tôi sẽ chủ yếu tập trung vào các thành phần do cộng đồng Kepler cung cấp.
Ứng dụng và Khung công tác
- Orbit là một khung công tác web MVC cho Lua, dựa trên WSAPI.
- WSAPI là API tóm tắt máy chủ lưu trữ web từ các ứng dụng web Lua và là cơ sở cho nhiều dự án.
- Xavante là một máy chủ Lua Web cung cấp giao diện WSAPI.
- Sputnik là một wiki / CMS được phát triển qua WSAPI trên Dự án Kepler được sử dụng để hài hước và giải trí.
- CGILua cung cấp tính năng tạo trang web LuaPages và LuaScripts, dựa trên WSAPI nhưng không còn được hỗ trợ. Thay vào đó, hãy sử dụng Orbit, Sputnik hoặc WSAPI.
Trong hướng dẫn này, chúng tôi sẽ cố gắng làm cho bạn hiểu những gì Lua có thể làm và để biết thêm về cách cài đặt và sử dụng nó, hãy tham khảo trang web của kepler
Quỹ đạo
Orbit là một khung công tác web MVC cho Lua. Nó hoàn toàn từ bỏ mô hình “tập lệnh” CGILua để ủng hộ các ứng dụng, trong đó mỗi ứng dụng Orbit có thể nằm gọn trong một tệp duy nhất, nhưng bạn có thể chia nó thành nhiều tệp nếu bạn muốn.
Tất cả các ứng dụng Orbit đều tuân theo giao thức WSAPI, vì vậy chúng hiện đang hoạt động với Xavante, CGI và Fastcgi. Nó bao gồm một trình khởi chạy giúp bạn dễ dàng khởi chạy phiên bản Xavante để phát triển.
Cách dễ nhất để cài đặt Orbit là sử dụng LuaRocks. Luarocks install quỹ đạo là lệnh cài đặt. Đối với điều này, bạn cần cài đặt LuaRocks trước.
Nếu bạn chưa cài đặt tất cả các phụ thuộc, đây là các bước cần làm để thiết lập Orbit trong môi trường Unix / Linux.
Cài đặt Apache
Kết nối với máy chủ của bạn. Cài đặt Apache2, các mô-đun hỗ trợ của nó và kích hoạt các mô-đun Apache2 bắt buộc bằng cách sử dụng –
$ 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
Cài đặt LuaRocks
$ sudo apt-get install luarocks
Cài đặt WSAPI, FCGI, Orbit và Xavante
$ sudo luarocks install orbit $ sudo luarocks install wsapi-xavante $ sudo luarocks install wsapi-fcgi
Thiết lập Apache2
$ sudo raj /etc/apache2/sites-available/default
Thêm phần sau này bên dưới phần <Thư mục / var / www /> của tệp cấu hình. Nếu phần này có ‘AllowOverride None’ thì bạn cần thay đổi ‘None’ thành ‘All’ để tệp .htaccess có thể ghi đè cấu hình cục bộ.
<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>
Khởi động lại máy chủ để đảm bảo các thay đổi được thực hiện có hiệu lực.
Để kích hoạt ứng dụng của mình, bạn cần thêm + ExecCGI vào tệp .htaccess trong thư mục gốc của ứng dụng Orbit – trong trường hợp này là / var / www.
Options +ExecCGI DirectoryIndex index.ws
Ví dụ đơn giản – Quỹ đạo
#!/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 Bây giờ, bạn sẽ có thể khởi chạy trình duyệt web của mình. Truy cập http: // localhost: 8080 / và bạn sẽ thấy kết quả sau:
First Page
Orbit cung cấp một tùy chọn khác, tức là mã Lua có thể tạo 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()) Tạo biểu mẫu
Dưới đây là một ví dụ về biểu mẫu đơn giản –
#!/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
Như đã đề cập trước đó, WSAPI hoạt động như cơ sở cho nhiều dự án và có nhiều tính năng được nhúng trong đó. Bạn có thể sử dụng WSAPI và hỗ trợ các nền tảng sau,
- các cửa sổ
- Hệ thống dựa trên UNIX
Các máy chủ và giao diện được hỗ trợ bởi WSAPI bao gồm,
- CGI
- FastCGI
- Xavante
WSAPI cung cấp một số thư viện, giúp chúng tôi lập trình web dễ dàng hơn bằng Lua. Một số tính năng được hỗ trợ trong Lua bao gồm,
- Yêu cầu xử lý
- Bộ đệm đầu ra
- Xác thực
- Tải lên tệp
- Yêu cầu cách ly
- Ghép kênh
Dưới đây là một ví dụ đơn giản về 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 Bạn có thể thấy trong đoạn mã trên, một trang html đơn giản được hình thành và trả về. Bạn có thể thấy việc sử dụng các coroutines để có thể trả về câu lệnh theo câu lệnh cho hàm gọi. Cuối cùng, mã trạng thái html (200), tiêu đề và trang html được trả về.
Xavante
Xavante là một máy chủ Web Lua HTTP 1.1 sử dụng kiến trúc mô-đun dựa trên các trình xử lý được ánh xạ URI. Xavante hiện đang cung cấp,
- Trình xử lý tệp
- Trình xử lý chuyển hướng
- Trình xử lý WSAPI
Trình xử lý tệp được sử dụng cho các tệp chung. Trình xử lý chuyển hướng cho phép ánh xạ lại URI và trình xử lý WSAPI để xử lý với các ứng dụng WSAPI.
Một ví dụ đơn giản được hiển thị bên dưới.
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 }, } Để sử dụng máy chủ ảo với Xavante, lệnh gọi đến xavante.HTTP sẽ được thay đổi thành một cái gì đó như sau:
xavante.HTTP{ server = {host = "*", port = 8080}, defaultHost = {}, virtualhosts = { ["www.sitename.com"] = simplerules } } Các thành phần web Lua
- Copas , một điều phối viên dựa trên các quy trình điều phối có thể được sử dụng bởi các máy chủ TCP / IP.
- Cosmo , một công cụ “mẫu an toàn” bảo vệ ứng dụng của bạn khỏi mã tùy ý trong các mẫu.
- Coxpcall đóng gói Lua pcall và xpcall gốc với những cái tương thích với coroutine.
- LuaFileSystem , một cách di động để truy cập cấu trúc thư mục cơ bản và các thuộc tính tệp.
- Nhẫn , một thư viện cung cấp cách tạo trạng thái Lua mới từ bên trong Lua.
Ghi chú kết thúc
Có rất nhiều khuôn khổ và thành phần web dựa trên Lua có sẵn cho chúng tôi và dựa trên nhu cầu, nó có thể được lựa chọn. Có sẵn các khuôn khổ web khác bao gồm những điều sau:
- Moonstalk cho phép phát triển và lưu trữ hiệu quả các dự án dựa trên web được tạo động được xây dựng bằng ngôn ngữ Lua; từ các trang cơ bản đến các ứng dụng phức tạp.
- Lapis , một khuôn khổ để xây dựng các ứng dụng web sử dụng MoonScript (hoặc Lua) chạy bên trong một phiên bản tùy chỉnh của Nginx được gọi là OpenResty.
- Lua Server Pages , một plug-in của công cụ lập trình kịch bản Lua giúp loại bỏ bất kỳ cách tiếp cận nào khác để phát triển web nhúng, mang đến một bước cắt ngắn ấn tượng cho các trang máy chủ C truyền thống.
Các khuôn khổ web này có thể thúc đẩy các ứng dụng web của bạn và giúp bạn thực hiện các hoạt động mạnh mẽ.
Lượt xem : 219