Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
ua是一門腳本動態語言,并不太適合做復雜業務邏輯的程序開發,但是,在高并發場景下,Nginx Lua編程是解決性能問題的利器。
Nginx Lua編程主要的應用場景如下:
ngx_lua是Nginx的一個擴展模塊,將Lua VM嵌入Nginx,請求時創建一個VM,請求結束時回收VM,這樣就可以在Nginx內部運行Lua腳本,使得Nginx變成一個Web容器。以OpenResty為例,其提供了一些常用的ngx_lua開發模塊:
Lua腳本需要通過Lua解釋器來解釋執行,除了Lua官方的默認解釋器外,目前使用廣泛的Lua解釋器叫做LuaJIT。LuaJIT采用C語言編寫,被設計成全兼容標準Lua 5.1,因此LuaJIT代碼的語法和標準Lua的語法沒多大區別。但是LuaJIT的運行速度比標準Lua快數十倍。
在OpenResty中,每個Worker進程使用一個Lua VM,當請求被分配到Worker時,將在這個Lua VM中創建一個協程,協程之間數據隔離,每個協程都具有獨立的全局變量。
ngx_lua是將Lua VM嵌入Nginx,讓Nginx執行Lua腳本,并且高并發、非阻塞地處理各種請求。Lua內置協程可以很好地將異步回調轉換成順序調用的形式。ngx_lua在Lua中進行的IO操作都會委托給Nginx的事件模型,從而實現非阻塞調用。開發者可以采用串行的方式編寫程序,ngx_lua會在進行阻塞的IO操作時自動中斷,保存上下文,然后將IO操作委托給Nginx事件處理機制,在IO操作完成后,ngx_lua會恢復上下文,程序繼續執行,這些操作對用戶程序都是透明的。
每個Worker進程都持有一個Lua解釋器或LuaJIT實例,被這個Worker處理的所有請求共享這個實例。每個請求的context上下文會被Lua輕量級的協程分隔,從而保證每個請求是獨立的。
ngx_lua采用one-coroutine-per-request的處理模型,對于每個用戶請求,ngx_lua會喚醒一個協程用于執行用戶代碼處理請求,當請求處理完成后,這個協程會被銷毀。每個協程都有一個獨立的全局環境,繼承于全局共享的、只讀的公共數據。所以,被用戶代碼注入全局空間的任何變量都不會影響其他請求的處理,并且這些變量在請求處理完成后會被釋放,這樣就保證所有的用戶代碼都運行在一個sandbox(沙箱)中,這個沙箱與請求具有相同的生命周期。
得益于Lua協程的支持,ngx_lua在處理10000個并發請求時,只需要很少的內存。根據測試,ngx_lua處理每個請求只需要2KB的內存,如果使用LuaJIT就會更少。
ngx_lua定義的Nginx配置指令大致如下:
ngx_lua配置指令在Nginx的HTTP請求處理階段所處的位置如圖:
http {
...
#設置“.lua”外部庫的搜索路徑,此指令的上下文為http配置塊
#";;"常用于表示原始的搜索路徑
lua_package_path "/foo/bar/?.lua;/blah/?.lua;;";
lua_package_cpath "/usr/local/openresty/lualib/?/?.so;/usr/local/openresty/lualib/?.so;;";
}
對于以上兩個指令,OpenResty可以在搜索路徑中使用插值變量。例如,可以使用插值變量$prefix或${prefix}獲取虛擬服務器server的前綴路徑,server的前綴路徑通常在Nginx服務器啟動時通過-p PATH命令在指定。
格式為:init_by_lua lua-script-str。
格式為:lua_code_cache on | off
http {
...
#項目初始化
init_by_lua_file conf/luaScript/initial/loading_config.lua;
#調試模式,關閉lua腳本緩存
lua_code_cache on;
...
}
在緩存關閉的時,set_by_lua_file、content_by_lua_file、access_by_lua_file、content_by_lua_file等指令中引用的Lua腳本都將不會被緩存,所有的Lua腳本都將從頭開始加載。
格式為:set_by_lua $destVar lua-script-str params
location /set_by_lua_demo {
#set 指令定義兩個Nginx變量
set $foo 1;
set $bar 2;
#調用Lua內聯代碼,將結果放入Nginx變量$sum
#Lua腳本的含義是,將兩個輸入參數$foo、$bar累積起來,然后相加的結果設置Nginx變量$sum中
set_by_lua $sum 'return tonumber(ngx.arg[1]) + tonumber(ngx.arg[2])' $foo $bar;
echo "$foo + $bar = $sum";
}
運行結果:
? work curl http://localhost/set_by_lua_demo
1 + 2 = 3
格式為:access_by_lua $destVar lua-script-str
location /access_demo {
access_by_lua 'ngx.log(ngx.DEBUG, "remote_addr = "..ngx.var.remote_addr);
if ngx.var.remote_addr == "192.168.56.121" then
return;
end
ngx.exit(ngx.HTTP_UNAUTHORIZED);
';
echo "hello world";
}
location /access_demo_2 {
allow "192.168.56.121";
deny all;
echo "hello world";
}
運行結果:
? work curl http://localhost/access_demo
<html>
<head><title>401 Authorization Required</title></head>
<body bgcolor="white">
<center><h1>401 Authorization Required</h1></center>
<hr><center>openresty/1.13.6.2</center>
</body>
</html>
#上述案例運行日志:
2022/02/15 10:32:17 [debug] 26293#0: *17 [lua] access_by_lua(nginx-lua-demo.conf:85):1: remote_addr = 127.0.0.1
2022/02/15 10:32:17 [info] 26293#0: *17 kevent() reported that client 127.0.0.1 closed keepalive connection
? work curl http://localhost/access_demo_2
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>openresty/1.13.6.2</center>
</body>
</html>
#上述案例運行日志
2022/02/15 10:33:11 [error] 26293#0: *18 access forbidden by rule, client: 127.0.0.1, server: localhost, request: "GET /access_demo_2 HTTP/1.1", host: "localhost"
2022/02/15 10:33:11 [info] 26293#0: *18 kevent() reported that client 127.0.0.1 closed keepalive connection
格式為:content_by_lua lua-script-str
location /errorLog {
content_by_lua '
ngx.log(ngx.ERR, "this is an error log ");
ngx.say("錯誤日志調用成功");
';
}
location /infoLog {
content_by_lua '
ngx.log(ngx.ERR, "this is an info log ");
ngx.say("業務日志調用成功");
';
}
location /debugLog {
content_by_lua '
ngx.log(ngx.ERR, "this is an debug log ");
ngx.say("調試日志調用成功");
';
}
OpenResty v0.9.17版本以后,使用content_by_lua_block指令代替content_by_lua指令,避免對代碼塊中的字符串進行轉譯。
運行結果:
? work curl http://localhost/errorLog
錯誤日志調用成功
? work curl http://localhost/infoLog
業務日志調用成功
? work curl http://localhost/debugLog
調試日志調用成功
內置變量
內置常量
內置常量基本是見名知意的,可以根據后面的實戰案例,加深理解。
核心常量
HTTP方法常量
HTTP狀態碼常量
日志類型常量
Nginx+LUA基礎到此結束,下一篇開始實戰!并在實戰中掌握基礎。
Lapis是一個為Lua語言設計的Web應用開發框架,它主要針對OpenResty,這是一個基于Nginx的高性能Web平臺。Lapis不僅提供了一個簡潔而強大的API來構建Web服務,還支持現代Web開發中的多種需求,包括路由、模板、數據庫集成、安全性等。
Lapis利用OpenResty的強大性能,通過LuaJIT在Nginx內部運行Lua代碼,實現了高性能的處理能力。這意味著開發者可以享受到接近C語言級別的執行效率,同時保持Lua語言的簡潔性和靈活性。
Lapis支持Lua協程,允許開發者編寫看起來是同步的代碼,但實際上是異步執行的。這種方式可以顯著提高應用程序的并發處理能力,同時避免了回調地獄,使代碼更加清晰易讀。
Lapis提供了一個靈活的路由系統,允許開發者定義各種URL模式,并將其映射到相應的處理函數。這使得URL的設計和處理變得簡單而直觀。
Lapis內置了HTML模板系統,支持etlua模板語言,允許開發者以一種聲明式的方式編寫HTML頁面。此外,Lapis的模板系統還提供了HTML構建器語法,使得HTML的生成既安全又便捷。
Lapis支持PostgreSQL、MySQL和SQLite等多種數據庫,提供了一個強大的模型層抽象,使得數據庫操作變得簡單。開發者可以通過繼承Model類來創建自己的數據庫模型,并輕松地進行數據的增刪改查操作。
Lapis提供了CSRF保護和會話支持,幫助開發者構建更安全的Web應用。通過內置的安全特性,可以有效地防止跨站請求偽造等常見的Web安全威脅。
local lapis = require "lapis"
local app = lapis.Application()
app:match("/", function(self)
return "Hello world!"
end)
return app
app:match("/profile/:username", function(self)
local username = self.params.username
return "Welcome, " .. username .. "!"
end)
local lapis = require "lapis"
local app = lapis.Application()
class extends lapis.Application
"/": =>
"Hello world!"
["/profile/:username"]: =>
local username = @params.username
"Welcome, " .. username .. "!"
return app
local Model = require("lapis.db.model").Model
class Users extends Model
local app = lapis.Application()
app:get("/users", function(self)
local users = Users:select("*")
return { render = true, users = users }
end)
return app
local lapis = require "lapis"
local app = lapis.Application()
app:match("/", function(self)
return self:render("index")
end)
return app
Lapis是一個功能強大且高效的Web開發框架,它結合了Lua語言的靈活性和OpenResty的性能優勢。無論是構建簡單的Web服務還是復雜的Web應用,Lapis都是一個值得考慮的選擇。隨著社區的不斷壯大和生態系統的完善,Lapis有望成為Lua Web開發領域的重要力量。
App Game Kit
The Game Creators出品
支持平臺:Windows,Linux, Mac OSX, iOS, Android, web browser, Raspberry Pi, SteamVR
語言:C++、AppGameKit Script
App Game Kit簡單易用易學習的2D/3D游戲開發工具包,擁有完整的游戲引擎功能,可快速建立內容發布到移動平臺,極適合個人、興趣、學校教育方面使用。
特點:輕量化、更新極快速、多平臺編輯器支持
授權:一次性支付.99,免版權費分成。一些擴充功能包另外購買。
Game Blender
BlenderFoundation維護
支持平臺:Windows, Mac OSX, Linux
語言:Python
Blender是一款免費開源的3D內容創作套件。包括建模、uv展開、材質繪制、動畫制作、合成、流體/煙霧、粒子、渲染系統等功能,也包含一個游戲引擎。Game Blender有圖形邏輯編輯器,可定義交互行為而無須編程,也擁有各種引擎基本功能,訂制、擴充能力極強。
特點:開源、更新極快速、真正的Allin One、強大的擴展性、多平臺編輯器支持。
授權:GPL3許可證。
CopperCube 5
Ambiera出品
支持平臺:Windows,Mac OSX, web browser, Android, Flash
語言:C++,Javascript
CopperCube一款簡易但完整的游戲引擎,擁有完整的編輯工具以及游戲預設,可以利用內建的功能建模并完成一款簡單的游戲,或是快速制作大型游戲的原型用以評估項目。
特點:快速上手、普通更新速度、支持中文。
授權:一次性支付.99,免版權費分成。
外加9.99,獲得一些額外功能,獲得完整C++原碼。
CryEngine V
Crytek公司出品
支持平臺:Windows,Linux, PlayStation 4, Xbox One, Oculus Rift, HTC Vive, OSVR 與 PlayStation VR
語言:C++、C#、Schematyc
CryEngine V是一套完整強大的游戲開發工具,擁有明確的工具體系,以及完成一款大型游戲的完善功能。 擁有極其優化的代碼和高度整合的后期處理效果,能在性能與畫面呈現上取得極佳的平衡效果。
特點:完整的開發生態鏈、更新快速、完全免費、穩定的大型場景乘載。
授權:任何平臺在游戲及影視領域使用免使用費,免版權費??稍谌魏坞A段選擇性支付任何價格(PayWhat You Want授權)。
Esenthel Engine
Esenthel/Grzegorz Slazinski出品
支持平臺:Windows,Windows Phone, Xbox, Mac OS, iOS, Android, Linux, Web
語言:C++
Esenthel是一款功能完整的商業游戲引擎,擁有多平臺部屬及完整的多人聯機特性。
特點:完整工具鏈、普通更新速度、帶原碼的多人模板、多平臺編輯器支持。
授權:免費試用。高級功能訂閱每月.40或每年4。完整原碼每年訂閱8。
Game Guru
The Game Creators出品
支持平臺:Windows
語言:Lua
Game Guru是一款簡易的游戲引擎,擁有完整的編輯工具以及游戲預設,可以利用內建的功能完成一款簡單的游戲。能購買AppGame Kit的擴充包將兩者整合。
特點:快速上手、更新較快、內置游戲模塊。
授權:一次性支付.99,免版權費抽成。
Gamestudio
Conitec Datasystems出品
支持平臺:Windows
語言:C++、C#、Delphi、Lite-C
Gamestudio或稱3D Gamestudio是一款老牌的游戲引擎,包含完整的渲染、優化、粒子、物理碰撞、2D引擎、音效引擎、網絡、和游戲模塊等等,可以應用于各種游戲、應用程序創建。
特點:完整的工具鏈和SDK、緩慢的更新速度、穩定、強大的可擴充性、擁有龐大的小區貢獻和幫助。
授權:免費版,免版權費分成,需開源自己的原碼/腳本。
加強版,一次性支付,功能同免費版,外加打包、編譯、加密功能,以及插件/引擎SDK。
商業版,一次性支付9,擁有中大型規模游戲所需大部分功能。
專業版,一次性支付9,擁有大型游戲所需所有功能。
Hero Engine
IdeaFabrik出品
支持平臺:Windows
語言:C++,C#, HeroScript Language
Hero Engine是一套擁有完整開發鏈的游戲開發工具,雖然各種游戲皆能開發,但對于客路端和服務器架構皆集成到開發流程中,是非常適合用來開發MMO的游戲引擎。
特點:完整的開發生態鏈、更新快速、超大場景建立、網絡游戲特化、百人以上開發團隊在線協作解決方案、官方服務器建設解決方案,大幅節省開發成本支出。
授權:免費方案,免費使用引擎。
入門方案,每年.95,兩名使用者,可于測試階段免費使用官方服務器資源,可于官方平臺免費使用Awesomium、RAD Game Tools、SpeedTree、DPVS Umbra、FMOD、FaceGen等第三方軟件和插件。
基本、標準、專業、高級方案個別為每年9.95、9.95、9.95、9.95,對應5、15、50、100名使用者。
終生方案95.95,300名使用者,包含源碼折扣。
訂閱入門以上方案在Alpha、Beta、最終release階段可由官方協助尋找、架設服務器,此階段由官方吸收成本,最終上線后收入分成30%。
jMonkey Game Engine
The jME Core團隊出品
支持平臺:Windows,OSX, Linux, Android, iOS, Oculus Rift
語言:Java
jMonkeyEngine是一款基于Java開發的游戲引擎,擁有跨平臺、易學的特性,可以在任何支持的IDE環境下開發,只要擁有Java技能就能夠開發任何一種3D游戲。
特點:開源、更新較慢、跨平臺。
授權:BSD許可證
Leadwerks
Leadwerks公司出品
支持平臺:Windows,Linux, SteamOS, HTC Vive, Oculus Rift, OSVR
語言:C++、Lua、Flowgraph
Leadwerks是一個基于OpenGL,3D的游戲引擎。 它具有延遲照明系統,屏幕空間環境遮擋,模擬實時全局照明,高級著色器,支持巨大的地形,新的植被系統,內置的UI設計工具,集成的LUA腳本編輯器等等。
特點:輕量化、普通更新速度、高度訂制化、社群活躍、多平臺編輯器支持。
授權:一次性支付.99,免版權費。C++原代碼另外加.99
Lumberyard
Amazone出品
支持平臺:Windows,Xbox One, PlayStation, iOS, Android, Oculus Rift, HTC Vive, OSVR, PlayStationVR
語言:C++、Lua、Flowgraph
Lumberyard是Amazone公司基于CryEngine 3與自家Amazon Web Services平臺開發的免費跨平臺游戲引擎,擁有CryEngine 3大部分的圖形技術外,其重構了引擎的網絡代碼,能夠輕易集成AWS服務做到大小規模在線游戲。
特點:完整的開發生態鏈、更新較快、穩定的大型場景乘載、網絡游戲特化。
授權:免費使用,免版權費分成。若無自己的網絡設備,限制僅能集成、租用AWS網絡服務。
Neoaxis
NeoAxis Group Ltd公司出品
支持平臺:Windows,Mac OSX
語言:C#
擁有開發游戲的完整功能,內置physX,內置網絡支持和尋路組件,內置UI系統。擁有功能完善的SDK、資源導入流程。
特點:輕量、功能完整、更新較慢。
授權:SDK免費使用,免版權費抽成。專業授權每人5,獲得編輯器、資源導入、定型、對象、網絡等代碼。完整授權每人95,獲得所有引擎代碼。
Panda 3D/ RenderPipeline
Carnegie Mellon University
支持平臺:Windows,Mac OSX, Linux, FreeBSD
語言:C++、Python
Panda3D是一款開源的游戲/渲染引擎,包括有物理、粒子、GUI、AI、高級著色器等特性。RenderPipeline為Panda3D的延伸項目,為引擎導入了PBR渲染、延遲渲染、高級后處理特效、TOD系統、插件系統等。
特點:開源項目、普通更新速度、WaltDisney Imagineering加持。
授權:訂制的BSD許可證。
S2Engine HD
Profenix Studio, Fabio Di Paola個人出品
支持平臺:Windows
語言:C++,GameMachine, S2Engine HD script
S2Engine HD為一款由個人制作/維護的游戲引擎,擁有整合好的高級畫面效果處理系統、類C的腳本語言、可視化腳本/編程模塊、音頻、物理、UI編輯器等,可以快速制作出美觀的游戲。
特點:快速上手、普通更新速度、完整的游戲制作流程、對中型以上團隊較不友善。
授權:一次性支付.99,免版權費分成。
Serious Engine
Croteam出品
支持平臺:Windows,Xbox, Linux, Mac OSX
語言:C++
Serious Engine目前最高版本為Serious Engine 4,可創建大型開放世界,渲染大量敵人,擁有逼真的后處理效果。其開源版本為1.10,可取得UI工具、建模工具、完整的游戲引擎原碼和編譯工具。
特點:開源、停止更新
授權:GPL-2.0許可證。
Shive3D
ShiVaTech出品
支持平臺:Windows,Mac OSX, Linux, Android, Blackberry, iOS, PlayStation 4, PlayStation3, Xbox360, Xbox One, Vita, Wii, Windows Phone, 網頁瀏覽器
語言:C++、Lua
Shive3D是擁有完整生態及工具鏈的一款引擎,對移動設備支持較好,曾經是移動設備游戲的首選引擎之一。近年來由于引擎老化創新不足,用戶已大幅流失,但仍不失為一個輕便好用的引擎。
特點:輕量化、緩慢更新速度、移動設備支持良好。
授權:Web版可使用所有編輯器功能,可部屬到網頁,免版權費,鎖定部分引擎特性。
Basic版一次性支付0,可部屬到所有平臺,其余限制與Web版相同。
Advanced版一次性支付00,可使用所有高級功能。
Source Engine/Source SDK
Valve公司出品
支持平臺:Windows,macOS, Linux, Android
語言:C++(底層)、Squirrel
歷久彌新的一款引擎/模塊編輯器,擁有許多模塊及小區資源。
特點:老經典
授權:免費,擁有任一款Source引擎開發的游戲即可使用。
Stingray
Autodesk出品
支持平臺:Windows,PlayStation, Xbox, Android, iOS, Oculus Rift, HTC Vive, OSVR, Playstation VR
語言:Lua
Stingray為一款與Autodesk建模及IBM軟件高度集成的游戲/渲染引擎,并完美整合旗下的AutodeskGameware產品線,以及得益于數度重構而擁有干凈整齊的底層模塊,適合程序從頭建立游戲/應用程序內容。
特點:干凈、普通更新速度、與Autodesk建模工具景密結合、快速建立每訴內容、快速建立動畫內容。
授權:每月或每年0,與Maya LT捆綁訂閱,免版權費抽成。
源碼另議。
Tombstone Engine (C4Engine)
Terathon Software公司出品
支持平臺:PlayStation4, Windows, Mac OSX, Linux, iOS
語言:C++、OpenDDL、視覺腳本編輯器
Tombstone Engin是功能完整,開發速度快的游戲引擎,以前的C4引擎。擁有完整SDK、素材導入、UI編輯器、腳本編輯器等,可快速開發出可玩的FPS游戲。
特點:恐怖游戲特化、普通更新速度
授權:單一授權,一次性支付5,包含完整原碼、工具、示例游戲,無游戲、軟件數量限制,無版權費抽成。
Torque3D
GarageGames公司出品
支持平臺:Windows,Mac OSX, Linux
語言:C++
Torque是一款老牌的開放原始碼引擎,集Collada、PhysX等庫,擁有完整的生態鏈,穩定、易于擴充。
特點:老牌、開源、更新慢。
授權:MIT許可證。
Unigine 2
支持平臺:Windows,Mac OSX, Linux, Oculus Rift, HTC Vive, OSVR
語言:C++、C#、UnigineScript
Unigine為一款實時的3D互動解決方案,擁有適合中小型團隊制作游戲/應用程序的版本,以及仿真特化的高級版本,可以做到星球級別的大地形、大氣海洋模擬等,在專業應用、教育訓練、影視等產業擁有極高的優勢。
特點:專業應用、更新較快、較多的官方示范模板
授權:基礎單人,一次性支付95,免版權費分成。基礎團隊,一次性支付95,最多十人。
專業版按座位定價。
仿真版按需求定價。
Unity 5
Unity Technologies公司出品
支持平臺:Windows,Mac OSX, Linus, Android, BlackBerry, iOS, PlayStation 3, PlayStation 4,PlayStation Vita, Unity Web Player, Wii, Wii U, Windows Phone 8, Xbox 360, XboxOne還有其他以前的和未來的所有平臺
語言:C#、C++(底層)、UnityScript(JavaScript)
家喻戶曉,擁有世界上最大的開發鏈和社群、用戶、資源,不知道自己想做什么時第一個上手。
特點:完整的開發生態鏈、更新極快速、世界最多人使用以及與這個稱號相應的海量資源、移動設備支持良好、多平臺編輯器支持。
授權:個人或小公司限制版本免費,收入需低于0,000
Plus版擁有完整功能,每人每月訂閱,收入需低于0,000
Pro版擁有完整功能,每人每月訂閱5,無限制使用。
Unreal Engine 4
Epic Games公司出品
支持平臺:Windows,macOS, Linux, SteamOS, HTML5, iOS, Android, Nintendo Switch, PlayStation 4,Xbox One 與virtual reality (包含但不限于SteamVR/HTCVive, Oculus Rift, PlayStation VR, Google Daydream, OSVR 與 Samsung Gear VR)
語言:C++、Blueprint
Unreal Engine 4是一套完整強大的游戲開發工具,擁有明確的工具體系,以及完成一款大型游戲的完善功能。 擁有令人屏息的畫面以及極度靈活的腳本系統。從2D手機游戲到游戲機臺到VR,UE4為您提供開始,創建和發布游戲所需的一切。
特點:完整的開發生態鏈、更新極快速、擁有龐大的小區貢獻和錯誤修復、擁有龐大的市場和教學資源、穩定的大型場景乘載、多平臺編輯器支持。
授權:免費使用,在游戲或程序推送以后,每個季度收入達到,000以后須支付總收入的5%予Epic公司。
Wave Engine 2
Wave Engine團隊維護
支持平臺:Windows,Linux, Mac OSX, SteamOS, Xbox, iOS, Android, Oculus Rift, Hololens
語言:C#
Wave engine是一款基于.NET的開源跨平臺2D/3D游戲開發工具,內置有各種游戲所需的完整模塊,以及活潑的開發者社群,能夠獲得各種資源及解決問題。
特點:開源、更新較快、容易學習
授權:訂制的開源授權,唯一限制為所開發產品激活時需標明Wave標志。
千萬記得,承載游戲的是引擎,但完成游戲的是人的手。
記得關注小編哦
文章來源引擎世界網。
作者:我叫大春天。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。