ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãMAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ãè€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã®ããããã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã haproxy-lua ã§ãã
ããã°ã©ã ïŒ
NAME
haproxy-lua - haproxy-lua ããã¥ã¡ã³ã
ããããã· LUA ã©ã³ãã³ã° ã³ã³ããã¹ã
HAProxy ã§å®è¡ããã Lua ã³ãŒãã¯ã2 ã€ã®äž»ãªã¢ãŒãã§åŠçã§ããŸãã æåã®ãã®ã¯ã
åæå ã¢ãŒãããããŠXNUMXçªç®ã¯ ã©ã³ã¿ã€ã ã¢ãŒã.
ã» ã®äžã« åæå ã¢ãŒããDNS 解決ãå®è¡ã§ããŸããããœã±ãã I/O ãå®è¡ã§ããŸããã
ãã®åæåã¢ãŒãã§ã¯ãHAProxy 㯠Lua ã®å®è¡äžã«ãŸã ãããã¯ãããŠããŸãã
ããã°ã©ã ã
ã» ã®äžã« ã©ã³ã¿ã€ã ã¢ãŒããDNS 解決ã¯å®è¡ã§ããŸãããããœã±ããã¯äœ¿çšã§ããŸãã ã®
Lua ã³ãŒãã®å®è¡ã¯ãªã¯ãšã¹ãåŠçãšå€éåããããããLua ã³ãŒãã¯
ããããã³ã°ã§å®è¡ãããŠããããã§ãããããã§ã¯ãããŸããã
Lua ã³ãŒã㯠XNUMX ã€ä»¥äžã®ãã¡ã€ã«ã«ããŒããããŸãã ãããã®ãã¡ã€ã«ã«ã¯ãã¡ã€ã³ ã³ãŒããšé¢æ°ãå«ãŸããŠããŸãã
Lua ã«ã¯ 6 ã€ã®å®è¡ã³ã³ããã¹ãããããŸãã
1.Lua ãã¡ã€ã« ãã㣠ã³ã³ããã¹ã. ããã¯ãLua ãã¡ã€ã«ã®ããŒãäžã«å®è¡ãããŸãã
ããããã· [ã°ããŒãã«] ãã£ã¬ã¯ãã£ãã®ããã»ã¯ã·ã§ã³ ã«ã¢ããŒã. åæåæã«å®è¡ããã
ã¢ãŒãã ãã®ã»ã¯ã·ã§ã³ã¯ãHAProxy 㧠Lua ãã€ã³ãã£ã³ã°ãæ§æããããã«äœ¿çšãããŸãã
2. ã«ã¢ INIT ã³ã³ããã¹ã. HAProxy ã®çŽåŸã«å®è¡ããã Lua é¢æ°ã§ãã
æ§æã®è§£æã å®è¡ã¯åæåã¢ãŒãã§ãã ãã®æèã§ã¯ã
HAProxy ç°å¢ã¯æ¢ã«åæåãããŠããŸãã æ§æã確èªããã®ã«äŸ¿å©ã§ãã
ãœã±ããæ¥ç¶ãŸãã¯ã¿ã¹ã¯ã®åæåã ãããã®é¢æ°ã¯æ¬äœã§å®£èšãããŠããŸã
Lua é¢æ°ã®ã³ã³ããã¹ã core.register_init(). é¢æ°ã®ãããã¿ã€ãã¯ã
次ã®ããã«ãæ»ãå€ããã©ã¡ãŒã¿ãæããªãåçŽãªé¢æ°: function fcn().
3. ã«ã¢ ã¿ã¹ã¯ ã³ã³ããã¹ã. HAProxyã®èµ·ååŸã«å®è¡ãããLuaé¢æ°ã§ã
ã¹ã±ãžã¥ãŒã©ãŒãLuaé¢æ°ã§ã¿ã¹ã¯å®£èšçŽåŸ
core.register_task(). ãã®ã³ã³ããã¹ãã¯ããã©ãã£ãã¯åŠçãšåæã«è¡ãããšãã§ããŸãã ããã¯
ã©ã³ã¿ã€ã ã¢ãŒãã§å®è¡ãããŸãã é¢æ°ã®ãããã¿ã€ãã¯åçŽãªé¢æ°ã§ããã
次ã®ããã«ãæ»ãå€ãšãã©ã¡ãŒã¿ãŒãªã: function fcn().
4ã 㶠ã¢ã¯ã·ã§ã³ ã³ã³ããã¹ã. æ¡ä»¶ä»ãã§å®è¡ããã Lua é¢æ°ã§ãã ãããã®ã¢ã¯ã·ã§ã³ã¯ã
Luaãã£ã¬ã¯ãã£ãã«ãã£ãŠç»é²ããã "core.register_action()"ãã«ã¢ã®ãããã¿ã€ã
åŒã³åºãããé¢æ°ã¯ãäœãè¿ããããªããžã§ã¯ããåãé¢æ°ã§ã
ãšã³ããªãšããŠã¯ã©ã¹ TXNã function fcn(txn).
5ã 㶠ãµã³ãã«ãã§ãã ã³ã³ããã¹ã. ãã®é¢æ°ã¯ããšã³ããªåŒæ°ãšã㊠TXN ãªããžã§ã¯ããåãã
æååãè¿ããŸãã ãããã®ã¿ã€ãã®é¢æ°ã¯ãããããã³ã°é¢æ°ãå®è¡ã§ããŸããã 圌ã
å ã® HAProxy ãµã³ãã«ãã§ããã®äžéšãéçŽããŠçµæãè¿ãã®ã«åœ¹ç«ã¡ãŸãã
é¢æ°ã®ãããã¿ã€ã㯠function æåå fcn(txn). ãããã®é¢æ°ã¯ã
Luaé¢æ°ã«ç»é² core.register_fetches(). 宣èšãããåãµã³ãã«ãã§ããã¯
æåå "lua." ãåã«ä»ããŸãã
泚æ: ãã®é¢æ°ãå ã®ãã¡ã€ã«ã«å¿ èŠãªããŒã¿ãèŠã€ããããªãå¯èœæ§ããããŸãã
HAProxy ã¯ãµã³ãã« ãã§ãããè¡ããŸãããã®å Žåãçµæãè¿ãããšã¯ã§ããŸããã ãã®ã±ãŒã¹ã¯ãŸã ãªã
ã
6ã 㶠ã³ã³ããŒã¿ ã³ã³ããã¹ã. æååãå ¥åãšããŠåãåã£ãŠè¿ãLuaã®é¢æ°ã§ã
åºåãšããŠå¥ã®æååã ãããã®ã¿ã€ãã®é¢æ°ã¯ã¹ããŒãã¬ã¹ã§ãããã¢ã¯ã»ã¹ã§ããŸãã
ä»»æã®ã³ã³ããã¹ãã ãããã¯ããããã³ã°æ©èœãå®è¡ããŸããã åŒã³åºããããã¿ã€ã㯠function
æåå fcn(æåå). ãã®é¢æ°ã¯Luaé¢æ°ã«ç»é²ã§ããŸã
core.register_converters(). 宣èšãããåã³ã³ããŒã¿ãŒã«ã¯ãæåå "lua." ããã¬ãã£ãã¯ã¹ãšããŠä»ããããŸãã
ããããã· LUA ããã«ã¡ã¯ WORLD
HAProxy æ§æãã¡ã€ã« (hello_world.conf):
å šäœçãª
ã«ã¢ããŒãhello_world.lua
ãªãã¹ã³ ãããã·
ãã€ã³ã 127.0.0.1:10001
tcp èŠæ±æ€æ»é 延 1 ç§
tcp-request ã³ã³ãã³ã䜿çšãµãŒãã¹ lua.hello_world
HAProxy Lua ãã¡ã€ã« (hello_world.lua):
core.register_service("hello_world", "tcp", function(ã¢ãã¬ãã)
ã¢ãã¬ãã:send("ããã«ã¡ã¯äžç\n")
çµããïŒ
ãã®æ§æããã¹ãããããã« HAProxy ãéå§ããæ¹æ³:
./haproxy -f hello_world.conf
ä»ã®ç«¯æ«ã§ã¯ãtelnet ã§ãã¹ãã§ããŸã:
#:~ Telnet 127.0.0.1 10001
ããã«ã¡ã¯äžç
class è¯ïŒïŒ
ãã³ã¢ãã¯ã©ã¹ã«ã¯ããã¹ãŠã® HAProxy ã³ã¢æ©èœãå«ãŸããŠããŸãã ãããã®æ©èœã¯äŸ¿å©ã§ã
å®è¡ãããŒã®å¶åŸ¡ãããã¯ã®ç»é²ãã°ããŒãã« ãããã®æäœ
ãŸãã¯ACLã...
ãã³ã¢ãã¯ã©ã¹ã¯ãåºæ¬çã« HAProxy ã§æäŸãããŸãã ããã å¿ èŠãšãã è¡ãå¿ èŠã§ã
ãããã®æ©èœã䜿çšããŸãã
ãã³ã¢ãã¯ã©ã¹ã¯éçã§ãããã®ã¿ã€ãã®æ°ãããªããžã§ã¯ããäœæããããšã¯ã§ããŸããã
core.emerg
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ãç·æ¥ãã®å€ãå«ãŸããŸã
ãšããŸãã
ã³ã¢ã¢ã©ãŒã
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ãloglevel "alert" (1) ã®å€ãå«ãŸããŸãã
ã³ã¢.ã¯ãªãã£ã«ã«
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ãã¯ãªãã£ã«ã«ã(2) ã®å€ãå«ãŸããŸãã
ã³ã¢.ãšã©ãŒ
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ããšã©ãŒã(3) ã®å€ãå«ãŸããŸãã
ã³ã¢.èŠå
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ãèŠåã(4) ã®å€ãå«ãŸããŸãã
ã³ã¢.éç¥
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ãéç¥ã(5) ã®å€ãå«ãŸããŸãã
ã³ã¢æ å ±
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã« "info" (6) ã®å€ãå«ãŸããŸãã
ã³ã¢.ãããã°
è¿å
æŽæ°
ãã®å±æ§ã¯æŽæ°ã§ããã°ã¬ãã«ãdebugã(7) ã®å€ãå«ãŸããŸãã
core.log(ãã°ã¬ãã«ã ã¡ãã»ãŒãž)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
ãã®é¢æ°ã¯ãã°ãéä¿¡ããŸãã HAProxy ã«åŸã£ãŠããã°ãéä¿¡ãããŸãã
æ§æãã¡ã€ã«ãããã©ã«ãã® syslog ãµãŒã㌠(æ§æãããŠããå Žå)ãããã³
èš±å¯ãããŠããå Žå㯠stderrã
Arguments
· loglevel (æŽæ°) -- ã¡ãã»ãŒãžã«é¢é£ä»ãããããã° ã¬ãã«ã§ãã ããã¯
0 ãã 7 ãŸã§ã®æ°åã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã core.emergãcore.alertãcore.critãcore.errãcore.warningãcore.noticeã
core.infoãcore.debug (ãã° ã¬ãã«ã®å®çŸ©)
èŠã ã³ãŒã.ãããã°
èŠã ã³ã¢æ å ±
èŠã core.èŠå
èŠã core.ã¢ã©ãŒã
ã³ã¢.ãããã°(ã¡ãã»ãŒãž)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
Arguments
· MSG (æåå) -- ãã°ã®å 容ã
èŠã ãã°
以äžãšåãä»äºãããŸã:
function ãããã°(ã¡ãã»ãŒãž)
core.log(core.debug, msg)
end
ã³ã¢æ å ±(ã¡ãã»ãŒãž)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
Arguments
· MSG (æåå) -- ãã°ã®å 容ã
èŠã ãã°
function ã€ã³ãã©(ã¡ãã»ãŒãž)
core.log(ã³ã¢æ å ±ãã¡ãã»ãŒãž)
end
core.èŠå(ã¡ãã»ãŒãž)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
Arguments
· MSG (æåå) -- ãã°ã®å 容ã
èŠã ãã°
function èŠå(ã¡ãã»ãŒãž)
core.log(core.warning, msg)
end
core.ã¢ã©ãŒã(ã¡ãã»ãŒãž)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
Arguments
· MSG (æåå) -- ãã°ã®å 容ã
èŠã ãã°
function èŠå(ã¡ãã»ãŒãž)
core.log(core.alert, msg)
end
core.add_acl(ãã¡ã€ã«åã ããŒïŒ
ã³ã³ããã¹ã: initãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
ACL ãè¿œå ãã ã㌠ãã¡ã€ã«ã«ãã£ãŠåç §ããã ACL ãªã¹ãå ãã¡ã€ã«å.
Arguments
· ãã¡ã€ã«å (æåå) -- ACL ãšã³ããªãåç §ãããã¡ã€ã«åã
· ã㌠(æåå) -- è¿œå ãããããŒã
core.del_acl(ãã¡ã€ã«åã ããŒïŒ
ã³ã³ããã¹ã: initãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
ããŒã«ãã£ãŠåç §ããã ACL ãšã³ããªãåé€ããŸã ã㌠ã«ãã£ãŠåç §ããã ACL ã®ãªã¹ãå
ãã¡ã€ã«å.
Arguments
· ãã¡ã€ã«å (æåå) -- ACL ãšã³ããªãåç §ãããã¡ã€ã«åã
· ã㌠(æåå) -- åé€ãããããŒã
core.del_map(ãã¡ã€ã«å, ããŒïŒ
ã³ã³ããã¹ã: initãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
åç §ããããããã®ãªã¹ãã§ãæå®ãããããŒã§ã€ã³ããã¯ã¹ä»ããããããã ãšã³ããªãåé€ããŸã
圌ã®ãã¡ã€ã«åã§ã
Arguments
· ãã¡ã€ã«å (æåå) -- ããã ãšã³ããªãåç §ãããã¡ã€ã«åã
· ã㌠(æåå) -- åé€ãããããŒã
core.msleep(ããªç§)
ã³ã³ããã¹ã: æ¬äœãåæåãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³
ã core.msleep() æå®ãããããªç§ã®éãLua ã®å®è¡ãåæ¢ããŸãã
Arguments
· ããªç§ (æŽæ°) -- å¿ èŠãªããªç§ã
core.register_action(åå, è¡åã æ©èœ)
ã³ã³ããã¹ãïŒ äœ
ã¢ã¯ã·ã§ã³ãšããŠå®è¡ããLuaé¢æ°ãç»é²ããŸãã ç»é²ããããã¹ãŠã®ã¢ã¯ã·ã§ã³ã䜿çšå¯èœ
HAProxy ã§ã¯ãã¬ãã£ãã¯ã¹ãlua.ãã䜿çšããŸãã ã¢ã¯ã·ã§ã³ã¯ãå ¥åãšã㊠TXN ãªããžã§ã¯ã ã¯ã©ã¹ãååŸããŸãã
Arguments
· å (æåå) -- ã³ã³ããŒã¿ãŒã®ååã§ãã
· è¡å (ããŒãã«) -- HAProxy ã¢ã¯ã·ã§ã³ã説æããæååã®è¡šã§ãã
ã«ç»é²ãããã æåŸ ãããã¢ã¯ã·ã§ã³ã¯ããtcp-reqãããtcp-resãã
ãhttp-reqããŸãã¯ãhttp-resãã
· ãã¡ã³ã¯ (function) -- ã³ã³ããŒã¿ãŒãšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
é¢æ° (txn)
·
txn (TXN class): ãã® is a TXN ãªããžã§ã¯ã äžå€ for æäœãã ã
çŸåšã®ãªã¯ãšã¹ããŸã㯠TCP ã¹ããªãŒã ã
ããã§ã¯ãã¢ã¯ã·ã§ã³ç»é²ã®äŸã瀺ããŸãã ã¢ã¯ã·ã§ã³ã¯ããHello worldããéä¿¡ããã ãã§ã
ãã°ã
core.register_action("hello-world", { "tcp-req", "http-req" }, function(txn)
txn:Info("ããã«ã¡ã¯äžç")
çµããïŒ
ãã®ã³ãŒãäŸã¯ãHAproxy æ§æã§æ¬¡ã®ããã«äœ¿çšãããŸãã
ããã³ããšã³ã tcp_frt
ã¢ãŒã TCP
tcp-request ã³ã³ãã³ã lua.hello-world
ããã³ããšã³ã http_frt
ã¢ãŒãhttp
http-ãªã¯ãšã¹ã lua.hello-world
core.register_converters(åå, æ©èœ)
ã³ã³ããã¹ãïŒ äœ
ã³ã³ããŒã¿ãŒãšããŠå®è¡ããLuaé¢æ°ãç»é²ããŸãã ç»é²ãããŠãããã¹ãŠã®ã³ã³ããŒã¿ãŒã
HAProxy ã§ãã¬ãã£ãã¯ã¹ãlua.ãã§äœ¿çšãããŸãã ã³ã³ããŒã¿ãŒã¯æååãå ¥åãšããŠååŸãã
åºåãšããŠæååãè¿ããŸãã ç»é²ãããé¢æ°ã¯ã次ã®ããã«æ倧 9 ã€ã®å€ãåãããšãã§ããŸãã
ãã©ã¡ãŒã¿ã ãã¹ãŠã®å€ã¯æååã§ãã
Arguments
· å (æåå) -- ã³ã³ããŒã¿ãŒã®ååã§ãã
· ãã¡ã³ã¯ (function) -- ã³ã³ããŒã¿ãŒãšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
function(str, [p1 [, p2 [, ... [, p5]]]])
· STR (æåå): ããã¯ãæååã«èªåçã«å€æãããå ¥åå€ã§ãã
· p1 .. p5 (æåå): ãã㯠haroxy ã§å®£èšãããæåååŒæ°ã®ãªã¹ãã§ã
æ§æãã¡ã€ã«ã åŒæ°ã®æ°ã¯ 5 ãè¶ ããŸãããé åºãš
ãããã®æ§è³ªã¯ãéåžžãéçºè ã«ãã£ãŠéžæãããŸãã
core.register_fetches(ååã æ©èœ)
ã³ã³ããã¹ãïŒ äœ
ãµã³ãã«ãã§ãããšããŠå®è¡ãã Lua é¢æ°ãç»é²ããŸãã ç»é²ãããŠãããã¹ãŠã®ãµã³ãã« ãã§ãã
æ¥é èŸãlua.ããä»ã㊠HAProxy ã§äœ¿çšã§ããŸãã Lua ãµã³ãã« fetch ã¯æååãè¿ããŸã
åºåãšããŠã ç»é²ãããé¢æ°ã¯ããã©ã¡ãŒã¿ãŒãšããŠæ倧 9 ã€ã®å€ãåãããšãã§ããŸãã å šãŠã®
å€ã¯æååã§ãã
Arguments
· å (æåå) -- ã³ã³ããŒã¿ãŒã®ååã§ãã
· ãã¡ã³ã¯ (function) -- ãµã³ãã« ãã§ãããšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
æååé¢æ°(txn, [p1 [, p2 [, ... [, p5]]]])
· txn (TXN class): ããã¯ãçŸåšã®ãªã¯ãšã¹ãã«é¢é£ä»ãããã txn ãªããžã§ã¯ãã§ãã
· p1 .. p5 (æåå): ãã㯠haroxy ã§å®£èšãããæåååŒæ°ã®ãªã¹ãã§ã
æ§æãã¡ã€ã«ã åŒæ°ã®æ°ã¯ 5 ãè¶ ããŸãããé åºãš
ãããã®æ§è³ªã¯ãéåžžãéçºè ã«ãã£ãŠéžæãããŸãã
· è¿å: äœããã®ããŒã¿ãå«ãæååãçŸåšå€ãè¿ãããšãã§ããªãå Žå㯠nilã
ã«ã¢ã®ãµã³ãã«ã³ãŒã:
core.register_fetches("ããã«ã¡ã¯", function(txn)
ãããã«ã¡ã¯ããè¿ã
çµããïŒ
HAProxy ã®æ§æäŸ:
ããã³ããšã³ãã®äŸ
http-request ãªãã€ã¬ã¯ãã®å Žæ /%[lua.hello]
core.register_service(åå, ã¢ãŒãã æ©èœ)
ã³ã³ããã¹ãïŒ äœ
ãµãŒãã¹ãšããŠå®è¡ããLuaé¢æ°ãç»é²ããŸãã ç»é²ãããŠãããã¹ãŠã®ãµãŒãã¹ã
HAProxy ã§ãã¬ãã£ãã¯ã¹ãlua.ãã§äœ¿çšãããŸãã ãµãŒãã¹ã¯å ¥åãšããŠãªããžã§ã¯ã ã¯ã©ã¹ãååŸããŸã
å¿ èŠãªã¢ãŒãã«åŸã£ãŠã
Arguments
· å (æåå) -- ã³ã³ããŒã¿ãŒã®ååã§ãã
· ã¢ãŒã (æåå) -- å¿ èŠãªã¢ãŒãã説æããæååã§ãã ãtcpãã®ã¿ãŸãã¯
ãhttpãã¯èš±å¯ãããŠããŸãã
· ãã¡ã³ã¯ (function) -- ã³ã³ããŒã¿ãŒãšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
é¢æ°(ã¢ãã¬ãã)
· ã¢ãã¬ãã ã¢ãã¬ãã aã«ãªã ã¢ãã¬ããTCP class ãŸã㯠ã¢ãã¬ããHTTP class. çš®é¡ã«ããããŸãã
ç»é²ãããã¢ãã¬ããã®ã ã®ãhttpãå€ã§ç»é²ãããã¢ãã¬ãã ã¢ãŒã
ãã©ã¡ãŒã¿ã¯ ã¢ãã¬ããHTTP classã ãã ã¢ãŒã å€ããtcpãã®å Žåãã¢ãã¬ããã¯
ååŸããŸã ã¢ãã¬ããTCP class.
èŠå: ã¿ã€ããhttpãã®ã¢ãã¬ããã¯ãtcp-ãããåŒã³åºãããšã¯ã§ããŸãã' ã«ãŒã«ã»ããã ã®ã¿ ã 'http-'
ã€ãŸããã«ãŒã«ã»ãããã HTTP ã¢ãã¬ãããåŒã³åºãããšã¯ã§ããŸããã
tcp ã¢ãŒãã®ãããã·ã ã¿ã€ããtcpãã®ã¢ãã¬ããã¯ãã©ãããã§ãåŒã³åºãããšãã§ããŸãã
ããã§ã¯ããµãŒãã¹ç»é²ã®äŸã瀺ããŸãã ãµãŒãã¹ã¯ãHello worldãã
http å¿çã
core.register_service("hello-world", "http", é¢æ°(ã¢ãã¬ãã)
ããŒã«ã«å¿ç = "Hello World !"
ã¢ãã¬ãã:ã»ããã¹ããŒã¿ã¹(200)
ã¢ãã¬ãã:add_header("ã³ã³ãã³ãã®é·ã", string.len(å¿ç))
ã¢ãã¬ãã:add_header("ã³ã³ãã³ãã¿ã€ã", "ããã¹ã/ãã¬ãŒã³")
ã¢ãã¬ãã:start_response()
ã¢ãã¬ãã:éä¿¡(å¿ç)
çµããïŒ
ãã®ã³ãŒãäŸã¯ãHAproxy æ§æã§æ¬¡ã®ããã«äœ¿çšãããŸãã
ããã³ããšã³ãã®äŸ
http-request use-service lua.hello-world
core.register_init(é¢æ°)
ã³ã³ããã¹ãïŒ äœ
æ§æ解æåŸã«å®è¡ããé¢æ°ãç»é²ããŸãã ããã¯äŸ¿å©ã§ã
ãã©ã¡ãŒã¿ã確èªããŠãã ããã
Arguments
· ãã¡ã³ã¯ (function) -- åæååãšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
é¢æ°ïŒïŒ
å ¥åãå¿ èŠãšãããåºåãæ³å®ãããŠããŸããã
core.register_task(é¢æ°)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
ç¬ç«ããã¿ã¹ã¯ãç»é²ããŠéå§ããŸãã ã¿ã¹ã¯ã¯ãHAProxy ã¡ã€ã³
ã¹ã±ãžã¥ãŒã©ãèµ·åããŸãã ããšãã°ããã®ã¿ã€ãã®ã¿ã¹ã¯ãå®è¡ããŠè€éãªäœæ¥ãå®è¡ã§ããŸã
å¥åº·ãã§ãã¯ã
Arguments
· ãã¡ã³ã¯ (function) -- åæååãšããŠæ©èœããããã«åŒã³åºããã Lua é¢æ°ã§ãã
åŒæ°ãšããŠäœ¿çšããã Lua é¢æ°ã®ãããã¿ã€ãã¯æ¬¡ã®ãšããã§ãã
é¢æ°ïŒïŒ
å ¥åãå¿ èŠãšãããåºåãæ³å®ãããŠããŸããã
core.set_nice(ããã)
ã³ã³ããã¹ã: ã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
çŸåšã®ã¿ã¹ã¯ãŸãã¯çŸåšã®ã»ãã·ã§ã³ã®ãã€ã¹ãå€æŽããŸãã
Arguments
· nice (æŽæ°) -- é©åãªå€ã-1024 ãã 1024 ã®éã§ããå¿ èŠããããŸãã
core.set_map(ãã¡ã€ã«å, ããŒã å€ïŒ
ã³ã³ããã¹ã: initãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
å€ãèšå®ããŸã å€ ããŒã«é¢é£ä»ãããã ã㌠ã«ãã£ãŠåç §ãããããã㧠ãã¡ã€ã«å.
Arguments
· ãã¡ã€ã«å (æåå) -- ãããåç §
· ã㌠(æåå) -- èšå®ãŸãã¯çœ®æããããŒ
· å€ (æåå) -- é¢é£ããå€
core.sleep(int ç§ïŒ
ã³ã³ããã¹ã: æ¬äœãåæåãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³
ã ã³ã¢.ã¹ãªãŒã() é¢æ°ã¯ãæå®ãããç§ã®éã« Lua ã®å®è¡ãåæ¢ããŸãã
Arguments
· ç§ (æŽæ°) -- å¿ èŠãªç§æ°ã
ã³ã¢.tcp()
ã³ã³ããã¹ã: åæåãã¿ã¹ã¯ãã¢ã¯ã·ã§ã³
ãã®é¢æ°ã¯ãã®æ°ãããªããžã§ã¯ããè¿ããŸã ãœã±ãã ãšã«æäŸãããŸãã
è¿å
A ãœã±ãã class ãªããžã§ã¯ãã
core.done(ããŒã¿)
ã³ã³ããã¹ã: bodyãinitãtaskãactionãsample-fetchãconverter
Arguments
· ããŒã¿ (ã©ãã) -- åŒã³åºãå ã«ããŒã¿ãè¿ããŸãã ã§äŸ¿å©ã§ã
ãµã³ãã«ãã§ãããšãµã³ãã«ã³ã³ããŒã¿ãŒã
çŸåšã® Lua ã®å®è¡ãå³åº§ã«åæ¢ããåŒã³åºãå ã«æ»ããŸãã
ãµã³ãã« ãã§ãããã³ã³ããŒã¿ãŒããŸãã¯ã¢ã¯ã·ã§ã³ãå®è¡ããæå®ãããå€ãè¿ããŸã (ç¡èŠãããŸã)ã
ã¢ã¯ã·ã§ã³çšïŒã LUA ããã»ã¹ãäœæ¥ãçµäºãã
æ®ãã®ã³ãŒããå®è¡ããã«ã³ã³ãããŒã«ã HAProxy ã«æ»ããŸãã ããã¯æ¬¡ã®ããã«èŠãããšãã§ããŸã
ãã«ãã¬ãã«ã®ããªã¿ãŒã³ãã
ã³ã¢.å©åã()
ã³ã³ããã¹ã: ã¿ã¹ã¯ãã¢ã¯ã·ã§ã³ããµã³ãã«ãã§ãããã³ã³ããŒã¿ãŒ
HAProxy ã¹ã±ãžã¥ãŒã©ãŒã®æãè¿ããŸãã LUAåŠçæã«äœ¿çš
å€ãã®åŠçæéãæ¶è²»ããŸãã
class ãã§ãã()
ãã®ã¯ã©ã¹ã«ã¯ãå€ãã®å éš HAProxy ãµã³ãã« ãã§ãããå«ãŸããŠããŸãã HAProxyãèŠã
圌女ã®äœ¿çšæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ããconfiguration.txtãããã¥ã¡ã³ããåç §ããŠãã ããã 圌ãã§ã
ç« 7.3.2 ãã 7.3.6ã
èŠå äžéšã®ãµã³ãã« ãã§ããã¯ãäžéšã®ã³ã³ããã¹ãã§ã¯äœ¿çšã§ããŸããã ãããã®å¶é
æçšãªå Žåã¯ããã®ããã¥ã¡ã³ãã§æå®ãããŠããŸãã
èŠã TXN.f
èŠã TXN.sf
ãã§ããã¯æ¬¡ã®å Žåã«åœ¹ç«ã¡ãŸãã
· ã·ã¹ãã æéã®ååŸã
· ç°å¢å€æ°ãååŸãã
· ä¹±æ°ãååŸãã
· ãã¥ãŒå ã®ãŠãŒã¶ãŒæ°ãæ°ãªã©ã®æ¢ç¥ã®ããã¯ãšã³ã ã¹ããŒã¿ã¹
æ¥ç¶ã確ç«ããã
· IP éä¿¡å ãŸãã¯éä¿¡å ãªã©ã®ã¯ã©ã€ã¢ã³ãæ å ±ã
ã»ã¹ãã£ãã¯ããŒãã«ã®åãæ±ãã
ã»SSLæ å ±ãæŽåãã
· ããããŒãã¡ãœãããªã©ã® HTTP æ å ±ã
é¢æ°ã¢ã¯ã·ã§ã³(txn)
-- ãœãŒã¹ IP ãååŸ
ããŒã«ã« clientip = txn.f:src()
end
class ã³ã³ããŒã¿ãŒ()
ãã®ã¯ã©ã¹ã«ã¯ãå€ãã®å éš HAProxy ãµã³ãã« ã³ã³ããŒã¿ãŒãå«ãŸããŠããŸãã HAProxyãèŠã
圌女ã®äœ¿çšæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãããã¥ã¡ã³ããconfiguration.txtããåç §ããŠãã ããã ãã®
第7.3.1ç« ã
èŠã TXN.c
èŠã TXN.sc
Converters ã¯ãã¹ããŒããã«ãªå€æãæäŸããŸãã ãããã¯æ¬¡ã®å Žåã«åœ¹ç«ã¡ãŸãã
· å ¥åã base64 ã«å€æãã
· å ¥åæååã«ããã·ã¥ãé©çšãã (djb2ãcrc32ãsdbmãwt6)ã
· ãã©ãŒãããæ¥ä»ã
ã»jsonãšã¹ã±ãŒãã
· XNUMX ã€ã®ãªã¹ããæ¯èŒããŠåªå èšèªãæœåºãã
· äžãŸãã¯äžã®ã€ã¯ãã«å€ãããŸãã
· ã¹ãã£ã㯠ããŒãã«ãåŠçããŸãã
class ãã£ãã«ïŒïŒ
HAProxy ã¯ããªã¯ãšã¹ãã®åŠçã« XNUMX ã€ã®ãããã¡ãŒã䜿çšããŸãã æåã®ãã®ã¯äœ¿çšãããŸã
(ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®) èŠæ±ããŒã¿ã䜿çšããXNUMX çªç®ã¯æ¬¡ã®ç®çã§äœ¿çšãããŸãã
å¿çããŒã¿ (ãµãŒããŒããã¯ã©ã€ã¢ã³ããž)ã
åãããã¡ã«ã¯ XNUMX çš®é¡ã®ããŒã¿ãå«ãŸããŸãã æåã®ã¿ã€ãã¯åä¿¡ããŒã¿åŸ æ©ã§ã
åŠçã®ããã XNUMX çªç®ã®éšåã¯ãæ¢ã«åŠçãããéä¿¡ããŒã¿ã§ãã ãã€ãã®ã
çä¿¡ããŒã¿ã¯ãçºä¿¡ããŒã¿ãšããŠã¿ã°ä»ããããåŸã«åŠçãããæåŸã«
éä¿¡ãããŸãã 次ã®é¢æ°ã¯ããããã®ããŒã¿ãæäœããããã®ããŒã«ãæäŸããŸãã
ãããã¡ã
次ã®å³ã¯ããã£ãã« ã¯ã©ã¹é¢æ°ãé©çšãããå Žæã瀺ããŠããŸãã
èŠå: ãªã¯ãšã¹ãã¢ã¯ã·ã§ã³ã§ã¬ã¹ãã³ã¹ããèªã¿åãããšãã§ããã
å¿çã¢ã¯ã·ã§ã³ã§èŠæ±ãã£ãã«ãèªã¿åãããšãã§ããŸããã
[ç»å]
Channel.dup(ãã£ã³ãã«)
ãã®é¢æ°ã¯ããããã¡å šäœãå«ãæååãè¿ããŸãã ããŒã¿ã¯ããã§ã¯ãããŸãã
ãããã¡ããåé€ããåŸã§ååŠçã§ããŸãã
ãããã¡ããã以äžããŒã¿ãåä¿¡ã§ããªãå Žåã¯ã'nil' å€ãè¿ãããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
è¿å
å©çšå¯èœãªãã¹ãŠã®ããŒã¿ãŸã㯠nil ãå«ãæååã
Channel.get(ãã£ã³ãã«)
ãã®é¢æ°ã¯ããããã¡å šäœãå«ãæååãè¿ããŸãã ããŒã¿ãæ¶è²»ããã
ãããã¡ããã
ãããã¡ããã以äžããŒã¿ãåä¿¡ã§ããªãå Žåã¯ã'nil' å€ãè¿ãããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
è¿å
å©çšå¯èœãªãã¹ãŠã®ããŒã¿ãŸã㯠nil ãå«ãæååã
Channel.getline(ãã£ã³ãã«)
ãã®é¢æ°ã¯ããããã¡ã®æåã®è¡ãå«ãæååãè¿ããŸãã ããŒã¿
æ¶è²»ãããŸãã è¿ãããããŒã¿ã«æåŸã®ãnããå«ãŸããŠããªãå Žåã¯ã
ãããã¡å ã®æåŸã®å©çšå¯èœãªããŒã¿ã
ãããã¡ããã以äžããŒã¿ãåä¿¡ã§ããªãå Žåã¯ã'nil' å€ãè¿ãããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
è¿å
å©çšå¯èœãªè¡ãŸã㯠nil ãå«ãæååã
Channel.set(ãã£ã³ãã«ã ã¹ããªã³ã°ïŒ
ãã®é¢æ°ã¯ããããã¡ã®å 容ãæååã§çœ®ãæããŸãã é¢æ°ã¯æ»ããŸã
ã³ããŒãããé·ãããã以å€ã®å Žå㯠-1 ãè¿ããŸãã
ãã®é¢æ°ã§èšå®ãããããŒã¿ã¯éä¿¡ãããŸããã 圌ã㯠HAProxy ã®çµäºãåŸ ã¡ãŸã
åŠçäžã®ããããããã¡ããã£ã±ãã«ãªãå¯èœæ§ããããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
· æåå (æåå) -- éä¿¡ãããããŒã¿ã
è¿å
ã³ããŒããããã€ãæ°ãå«ãæŽæ°ãŸã㯠-1ã
Channel.append(ãã£ã³ãã«ã ã¹ããªã³ã°ïŒ
ãã®é¢æ°ã¯ãæåååŒæ°ããããã¡ã®å 容ã«è¿œå ããŸãã é¢æ°
ã³ããŒãããé·ããè¿ããŸãããã以å€ã®å Žå㯠-1 ãè¿ããŸãã
ãã®é¢æ°ã§èšå®ãããããŒã¿ã¯éä¿¡ãããŸããã 圌ã㯠HAProxy ã®çµäºãåŸ ã¡ãŸã
åŠçäžã®ããããããã¡ããã£ã±ãã«ãªãå¯èœæ§ããããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
· æåå (æåå) -- éä¿¡ãããããŒã¿ã
è¿å
ã³ããŒããããã€ãæ°ãå«ãæŽæ°ãŸã㯠-1ã
Channel.send(ãã£ã³ãã«ã ã¹ããªã³ã°ïŒ
ãã®æ©èœã§ã¯ãããŒã¿ã®å³æéä¿¡ãå¿ èŠã§ããã æ¥ç¶ã
éãããšããããã¡ã¯å®æçã«ãã©ãã·ã¥ããããã¹ãŠã®æååãéä¿¡ã§ããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
· æåå (æåå) -- éä¿¡ãããããŒã¿ã
è¿å
ã³ããŒããããã€ãæ°ãå«ãæŽæ°ãŸã㯠-1ã
Channel.get_in_length(ãã£ãã«)
ãã®é¢æ°ã¯ããããã¡ã®å ¥åéšåã®é·ããè¿ããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
è¿å
å©çšå¯èœãªãã€ãæ°ãå«ãæŽæ°ã
Channel.get_out_length(ãã£ãã«)
ãã®é¢æ°ã¯ããããã¡ã®åºåéšåã®é·ããè¿ããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
è¿å
å©çšå¯èœãªãã€ãæ°ãå«ãæŽæ°ã
Channel.forward(ãã£ã³ãã«ã intïŒ
ãã®é¢æ°ã¯ããããã¡ã®å ¥åéšåããåºåéšåã«ãã€ãã転éããŸãã
Arguments
· ãã£ã³ãã« (ã¯ã©ã¹ãã£ã³ãã«) -- æäœããããã£ãã«ã
· intå (æŽæ°) -- 転éãããããŒã¿ã®éã
class HTTPïŒïŒ
ãã®ã¯ã©ã¹ã«ã¯ããã¹ãŠã® HTTP æäœé¢æ°ãå«ãŸããŠããŸãã
HTTP.req_get_headers(http)
ãã¹ãŠã®ãªã¯ãšã¹ã ããããŒãå«ãé åãè¿ããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
è¿å
ããããŒã®é åã
èŠã HTTP.res_get_headers()
è¿ãããé åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
HTTP:req_get_headers()[' '][ ] = " "
ããŒã«ã« hdr = HTTP:req_get_headers()
hdr["ãã¹ã"][0] = "www.test.com"
hdr["åãå ¥ãã"][0] = "ãªãŒãã£ãª/åºæ¬ q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*/*, q=0.1"
HTTP.res_get_headers(http)
ãã¹ãŠã®å¿çããããŒãå«ãé åãè¿ããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
è¿å
ããããŒã®é åã
èŠã HTTP.req_get_headers()
è¿ãããé åã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
HTTP:res_get_headers()[' '][ ] = " "
ããŒã«ã« hdr = HTTP:req_get_headers()
hdr["ãã¹ã"][0] = "www.test.com"
hdr["åãå ¥ãã"][0] = "ãªãŒãã£ãª/åºæ¬ q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*.*, q=0.1"
HTTP.req_add_header(http, åã å€ïŒ
"name" ã§æå®ãããååã® HTTP ããã㌠ãã£ãŒã«ãããªã¯ãšã¹ãã«è¿œå ãã
ãã®å€ã¯ãå€ãã§å®çŸ©ãããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· å€ (æåå) -- ããããŒå€ã
èŠã HTTP.res_add_header()
HTTP.res_add_header(http, åã å€ïŒ
"name" ã§æå®ãããååã® HTTP ããã㌠ãã£ãŒã«ããå¿çã«è¿œå ãã
ãã®å€ã¯ãå€ãã§å®çŸ©ãããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· å€ (æåå) -- ããããŒå€ã
èŠã HTTP.req_add_header()
HTTP.req_del_header(http, åïŒ
"name" ã§æå®ãããååãæã€ãªã¯ãšã¹ãã®ãã¹ãŠã® HTTP ããã㌠ãã£ãŒã«ããåé€ããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
èŠã HTTP.res_del_header()
HTTP.res_del_header(http, åïŒ
"name" ã§æå®ãããååãæã€ã¬ã¹ãã³ã¹ã®ãã¹ãŠã® HTTP ããã㌠ãã£ãŒã«ããåé€ããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
èŠã HTTP.req_del_header()
HTTP.req_set_header(http, åã å€ïŒ
ãã®å€æ°ã¯ããã¹ãŠã®ããããŒãnameãã®ãã¹ãŠã®åºçŸããXNUMX ã€ã ããå«ããã®ã«çœ®ãæããŸã
å€"ã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· å€ (æåå) -- ããããŒå€ã
èŠã HTTP.res_set_header()
ãã®é¢æ°ã¯ã次ã®ã³ãŒããšåãåããããŸã:
é¢æ° fcn(txn)
TXN.http:req_del_header("ããããŒ")
TXN.http:req_add_header("ããããŒ", "å€")
end
HTTP.res_set_header(http, åã å€ïŒ
ãã®å€æ°ã¯ããã¹ãŠã®ããããŒãnameãã®ãã¹ãŠã®åºçŸããXNUMX ã€ã ããå«ããã®ã«çœ®ãæããŸã
å€"ã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· å€ (æåå) -- ããããŒå€ã
èŠã HTTP.req_rep_header()
HTTP.req_rep_header(http, åã æ£èŠè¡šçŸã 亀æïŒ
ããã㌠ãã£ãŒã«ããnameãã®ãã¹ãŠã®åºçŸã§æ£èŠè¡šçŸã«äžèŽããŸãã
ãregexãã«å€æãããreplaceãåŒæ°ã§çœ®ãæããŸãã 亀æ䟡å€
1ã2ã... ãªã©ã®åŸæ¹åç §ãå«ããããšãã§ããŸãããã®é¢æ°ã¯ãªã¯ãšã¹ãã§æ©èœããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· æ£èŠè¡šçŸ (æåå) -- äžèŽããæ£èŠè¡šçŸã
· replace (æåå) -- 眮æå€ã
èŠã HTTP.res_rep_header()
HTTP.res_rep_header(http, åã æ£èŠè¡šçŸã ã¹ããªã³ã°ïŒ
ããã㌠ãã£ãŒã«ããnameãã®ãã¹ãŠã®åºçŸã§æ£èŠè¡šçŸã«äžèŽããŸãã
ãregexãã«å€æãããreplaceãåŒæ°ã§çœ®ãæããŸãã 亀æ䟡å€
1ã2ã... ãªã©ã®åŸæ¹åç §ãå«ããããšãã§ããŸãããã®é¢æ°ã¯ãªã¯ãšã¹ãã§æ©èœããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· æ£èŠè¡šçŸ (æåå) -- äžèŽããæ£èŠè¡šçŸã
· replace (æåå) -- 眮æå€ã
èŠã HTTP.req_replace_header()
HTTP.req_replace_value(http, åã æ£èŠè¡šçŸã 亀æïŒ
ãHTTP.req_replace_header()ãã®ããã«æ©èœããŸãããæ£èŠè¡šçŸãšäžèŽããç¹ãç°ãªããŸã
å šäœã§ã¯ãªããããã㌠ãã£ãŒã«ããnameãã®ãã¹ãŠã®ã«ã³ãåºåãã®å€
ãããã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· æ£èŠè¡šçŸ (æåå) -- äžèŽããæ£èŠè¡šçŸã
· replace (æåå) -- 眮æå€ã
èŠã HTTP.req_replace_header()
èŠã HTTP.res_replace_value()
HTTP.res_replace_value(http, åã æ£èŠè¡šçŸã 亀æïŒ
ãHTTP.res_replace_header()ãã®ããã«æ©èœããŸãããæ£èŠè¡šçŸãšäžèŽããç¹ãç°ãªããŸã
å šäœã§ã¯ãªããããã㌠ãã£ãŒã«ããnameãã®ãã¹ãŠã®ã«ã³ãåºåãã®å€
ãããã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· å (æåå) -- ããããŒåã
· æ£èŠè¡šçŸ (æåå) -- äžèŽããæ£èŠè¡šçŸã
· replace (æåå) -- 眮æå€ã
èŠã HTTP.res_replace_header()
èŠã HTTP.req_replace_value()
HTTP.req_set_method(http, æ¹æ³ïŒ
ãã©ã¡ãŒã¿ãã¡ãœãããã§ãªã¯ãšã¹ãã¡ãœãããæžãæããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· æ¹æ³ (æåå) -- æ°ããã¡ãœããã
HTTP.req_set_path(http, ãã¹ïŒ
ãpathããã©ã¡ãŒã¿ã§ãªã¯ãšã¹ããã¹ãæžãæããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· path (æåå) -- æ°ãããã¹ã
HTTP.req_set_query(http, ã¯ãšãªïŒ
æåã®çå笊ã®åŸã«è¡šç€ºããããªã¯ãšã¹ãã®ã¯ãšãªæååãæžãæããŸã
("?") ããã©ã¡ãŒã¿ãŒ "query" ãšå ±ã«äœ¿çšããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· ã¯ãšãªãŒ (æåå) -- æ°ããã¯ãšãªã
HTTP.req_set_uri(http, ããïŒ
ãã©ã¡ãŒã¿ãuriãã§ãªã¯ãšã¹ãURIãæžãæããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· URI (æåå) -- æ°ãã uriã
HTTP.res_set_status(http, ç¶æ ïŒ
ãã©ã¡ãŒã¿ãcodeãã§ã¬ã¹ãã³ã¹ã¹ããŒã¿ã¹ã³ãŒããæžãæããŸãã ãã®çç±ã«æ³šæããŠãã ãã
æ°ããã³ãŒãã«èªåçã«é©å¿ããŸãã
Arguments
· HTTP (ã¯ã©ã¹_http) -- é¢é£ãã http ãªããžã§ã¯ãã
· status (æŽæ°) -- æ°ããå¿çã¹ããŒã¿ã¹ ã³ãŒãã
class TXN()
txn ã¯ã©ã¹ã«ã¯ãhttp ãŸã㯠tcp ãã©ã³ã¶ã¯ã·ã§ã³ã«é¢é£ãããã¹ãŠã®é¢æ°ãå«ãŸããŠããŸãã
(tcp ã¹ããªãŒã 㯠tcp ãã©ã³ã¶ã¯ã·ã§ã³ãšåãã§ãããHTTP ãã©ã³ã¶ã¯ã·ã§ã³ã§ããããšã«æ³šæããŠãã ããã
tcp ã¹ããªãŒã ãšåãã§ã¯ãããŸãã)ã
ãã®ã¯ã©ã¹ã䜿çšãããšããªã¯ãšã¹ãããããŒã¿ãååŸããå€æŽããŠã
ããã転éããŸãã
ãã®ã¯ã©ã¹ãæäŸãããã¹ãŠã®æ©èœã¯ãã³ã³ããã¹ãã§äœ¿çšã§ããŸã
ãµã³ãã«ãã§ãã & è¡å.
TXN.c
è¿å
An ã³ã³ããŒã¿ class.
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
TXN.sc
è¿å
An ã³ã³ããŒã¿ class.
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãã®ãªããžã§ã¯ãã®æ©èœ
åžžã«æååãè¿ããŸãã
TXN.f
è¿å
An ãã§ãã class.
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
TXN.sf
è¿å
An ãã§ãã class.
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãã®ãªããžã§ã¯ãã®æ©èœ
åžžã«æååãè¿ããŸãã
TXN.req
è¿å
An ãã£ãã« class.
ãã®å±æ§ã«ã¯ããªã¯ãšã¹ã ãããã¡ã®ãã£ãã« ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
TXN.res
è¿å
An ãã£ãã« class.
ãã®å±æ§ã«ã¯ãå¿çãããã¡ãŒã®ãã£ãã« ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
TXN.http
è¿å
An HTTP class.
ãã®å±æ§ã«ã¯ãHTTP ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãããã·ã
ãã¢ãŒãhttpããæå¹ã«ãªã£ãŠããŸãã
TXN.log(TXN, ãã°ã¬ãã«ã ã¡ãã»ãŒãž)
ãã®é¢æ°ã¯ãã°ãéä¿¡ããŸãã HAProxy ã«åŸã£ãŠããã°ãéä¿¡ãããŸãã
æ§æãã¡ã€ã«ãããã©ã«ãã® syslog ãµãŒã㌠(æ§æãããŠããå Žå)ãããã³
èš±å¯ãããŠããå Žå㯠stderrã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· loglevel (æŽæ°) -- ã¡ãã»ãŒãžã«é¢é£ä»ãããããã° ã¬ãã«ã§ãã ããã¯
0 ãã 7 ãŸã§ã®æ°åã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã core.emergãcore.alertãcore.critãcore.errãcore.warningãcore.noticeã
core.infoãcore.debug (ãã° ã¬ãã«ã®å®çŸ©)
èŠã TXN.deflog
èŠã TXN.ãããã°
èŠã TXN.æ å ±
èŠã TXN.èŠå
èŠã TXN.ã¢ã©ãŒã
TXN.deflog(TXN, ã¡ãã»ãŒãž)
ã«é¢é£ä»ãããããããã·ã®ããã©ã«ãã®ãã°ã¬ãã«ã§ãã°è¡ãéä¿¡ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã TXN.log
TXN.Debug(txn, ã¡ãã»ãŒãž)
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã TXN.log
以äžãšåãä»äºãããŸã:
é¢æ° Debug(txn, msg)
TXN.log(txnãcore.debugãmsg)
end
TXN.Info(txn, ã¡ãã»ãŒãž)
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã TXN.log
é¢æ° Debug(txn, msg)
TXN.log(txnãcore.infoãmsg)
end
TXN.èŠå(txn, ã¡ãã»ãŒãž)
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã TXN.log
é¢æ° Debug(txn, msg)
TXN.log(txnãcore.warningãmsg)
end
TXN.ã¢ã©ãŒã(txn, ã¡ãã»ãŒãž)
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· MSG (æåå) -- ãã°ã®å 容ã
èŠã TXN.log
é¢æ° Debug(txn, msg)
TXN.log(txnãcore.alertãmsg)
end
TXN.get_priv(txn)
çŸåšã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ä¿åãããŠãã Lua ããŒã¿ãè¿ããŸã ( TXN.set_priv())
é¢æ°ã ããŒã¿ãæ ŒçŽãããŠããªãå Žåã¯ãnil å€ãè¿ããŸãã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
è¿å
以åã«ä¿åãããäžéæãªããŒã¿ããŸãã¯äœãå©çšã§ããªãå Žå㯠nilã
TXN.set_priv(txn, ããŒã¿ïŒ
çŸåšã® HAProxy ãã©ã³ã¶ã¯ã·ã§ã³ã«ããŒã¿ãæ ŒçŽããŸãã ãã®ã¢ã¯ã·ã§ã³ã¯å€ããã®ã眮ãæããŸã
ä¿åãããããŒã¿ã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· ããŒã¿ (äžéæãª) -- ãã©ã³ã¶ã¯ã·ã§ã³ã«æ ŒçŽãããããŒã¿ã
TXN.set_var(TXN, varã å€ïŒ
Lua åã HAProxy åã«å€æãã variable ã«æ ŒçŽããŸãã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· VAR (æåå) -- HAProxy å€æ°ã«å¿ããå€æ°å
æ§æã
· å€ (äžéæãª) -- å€æ°ã«æ ŒçŽãããããŒã¿ã
TXN.get_var(TXN, å€æ°)
å€æ°ã³ã³ããŒã¿ãŒã«æ ŒçŽãããããŒã¿ã Lua åã§è¿ããŸãã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· VAR (æåå) -- HAProxy å€æ°ã«å¿ããå€æ°å
æ§æã
TXN.get_headers(txn)
ãã®é¢æ°ã¯ãããããŒã®é åãè¿ããŸãã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
è¿å
ããããŒã®é åã
TXN.å®äº(txn)
ãã®é¢æ°ã¯ããã©ã³ã¶ã¯ã·ã§ã³ããã³é¢é£ããã»ãã·ã§ã³ã®åŠçãçµäºããŸãã
é倧ãªãšã©ãŒãæ€åºããããšãããŸãã¯åŸã§åŠçãçµäºããããã«äœ¿çšã§ããŸãã
äžéšã®ããŒã¿ãã¯ã©ã€ã¢ã³ãã«è¿ãããŸãã (äŸ: ãªãã€ã¬ã¯ã)ã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
TXN.set_loglevel(txn, ãã°ã¬ãã«)
çŸåšã®ãªã¯ãšã¹ãã®ãã° ã¬ãã«ãå€æŽããããã«äœ¿çšãããŸãã ããã°ã¬ãã«ãã¯
0 ãã 7 ãŸã§ã®æŽæ°ã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· loglevel (æŽæ°) -- å¿ èŠãªãã° ã¬ãã«ã ãã®å€æ°ã¯ã次ã®ããããã«ãªããŸãã
èŠã è¯ã
TXN.set_tos(txn, ãã¹ïŒ
ã¯ã©ã€ã¢ã³ãã«éä¿¡ããããã±ããã® TOS ãŸã㯠DSCP ãã£ãŒã«ãå€ãèšå®ããããã«äœ¿çšãããŸãã
ããããµããŒããããã©ãããã©ãŒã ã§ãtosãã«æž¡ãããå€ã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· TOS (æŽæ°) -- æ°ãã TOS os DSCPã
TXN.set_mark(txn, ããŒã¯ïŒ
ã¯ã©ã€ã¢ã³ãã«éä¿¡ããããã¹ãŠã®ãã±ããã® Netfilter MARK ãå€ã«èšå®ããããã«äœ¿çšãããŸãã
ããããµããŒããããã©ãããã©ãŒã ã§ãããŒã¯ããæž¡ããŸããã
Arguments
· txn (ã¯ã©ã¹_txn) -- ããŒã¿ãå«ãã¯ã©ã¹ txn ãªããžã§ã¯ãã
· ããŒã¯ (æŽæ°) -- ããŒã¯å€ã
class ãœã±ããïŒïŒ
ãã®ã¯ã©ã¹ã¯ãLua Socket ã¯ã©ã¹ãšäºææ§ãããå¿ èŠããããŸãã ãã¯ã©ã€ã¢ã³ããã®ã¿
æ©èœãå©çšå¯èœã§ãã Lua ãœã±ããã®ããã¥ã¡ã³ããåç §ããŠãã ããã
http://w3.impa.br/~diego/software/luasocket/tcp.html
Socket.close(ãœã±ãã)
TCP ãªããžã§ã¯ããéããŸãã ãªããžã§ã¯ãã䜿çšããå éšãœã±ãããéããããããŒã«ã«
ãªããžã§ã¯ãããã€ã³ããããã¢ãã¬ã¹ã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããããã«ãªããŸãã ããã
ãããªãæäœ (close ã¡ãœãããžã®ãããªãåŒã³åºããé€ã) ã¯ã
éãããœã±ããã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
泚: 䜿çšæžã¿ã®ãœã±ãããäžèŠã«ãªã£ããããã¹ãŠéããããšãéèŠã§ãã
å€ãã®ã·ã¹ãã ã§ã¯ãåãœã±ããã¯ãã¡ã€ã«èšè¿°åã䜿çšããŸãããã·ã¹ãã ãå¶éãããŠããŸã
è³åã ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ããããªããžã§ã¯ãã¯ãç Žæ£ãããåã«èªåçã«éããããŸãã
ããã©ãã
Socket.connect(ãœã±ããã äœæ[ã ããŒã]ïŒ
ãœã±ãã ãªããžã§ã¯ãããªã¢ãŒã ãã¹ãã«æ¥ç¶ããããšããŸãã
ãšã©ãŒã®å Žåãã¡ãœãã㯠nil ã«ç¶ããŠãšã©ãŒã説æããæååãè¿ããŸãã
æåããå Žåãã¡ãœãã㯠1 ãè¿ããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
· äœæ (æåå) -- IP ã¢ãã¬ã¹ãŸãã¯ãã¹ãåãæå®ã§ããŸãã 以äžãåç §ããŠãã ãã
詳ããã¯ã
· ããŒã (æŽæ°) -- [1..64K] ã®ç¯å²ã®æŽæ°ã§ãªããã°ãªããŸããã
è¿å
1 ãŸãã¯ãŒãã
ã¢ãã¬ã¹ ãã£ãŒã«ãæ¡åŒµã«ãããconnect() é¢æ°ã䜿çšããŠæ¥ç¶ã§ããŸãã
TCP 以å€ã®ã¹ããªãŒã ã simpleipv4 ãŸã㯠ipv6 ã¢ãã¬ã¹ãå«ãæ§æã¯ã
åºæ¬çã«æ³å®ããããã©ãŒãããã ãã®åœ¢åŒã«ã¯ããŒããå¿ èŠã§ãã
åãå ¥ããããä»ã®åœ¢åŒã¯ãã/socket/pathãã®ãããªãœã±ãã ãã¹ã§ãããæ¥ç¶ãèš±å¯ããŸãã
ãœã±ããã«ã æœè±¡åå空éã¯æ¥é èŸãabns@ãã§ãµããŒããããæåŸã«
ãã¡ã€ã«èšè¿°åã¯ããã¬ãã£ãã¯ã¹ãfd@ããä»ããŠæž¡ãããšãã§ããŸãã ãã¬ãã£ãã¯ã¹ãipv4@ãããipv6@ã
ããã³ãunix@ãããµããŒããããŠããŸãã ããŒãã¯æååã«æž¡ãããšãã§ããŸãã æ§æ
ã127.0.0.1:1234ããæå¹ã§ãã ãã®å Žåããã©ã¡ãŒã¿ ããŒã ç¡èŠãããŸãã
Socket.connect_ssl(ãœã±ããã äœæã ããŒãïŒ
é¢æ° socket:connect ãšåãåäœã§ãããSSL ã䜿çšããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
è¿å
1 ãŸãã¯ãŒãã
Socket.getpeername(ãœã±ãã)
æ¥ç¶ãããã¯ã©ã€ã¢ã³ã ãªããžã§ã¯ãã®ãªã¢ãŒãåŽã«é¢ããæ å ±ãè¿ããŸãã
ãã¢ã® IP ã¢ãã¬ã¹ãšããã«ç¶ãããŒãçªå·ãå«ãæååãè¿ããŸãã
ãã¢ãæ¥ç¶ã«äœ¿çšããŠããŸãã ãšã©ãŒã®å Žåãã¡ãœãã㯠nil ãè¿ããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
è¿å
ãµãŒããŒæ å ±ãå«ãæååã
Socket.getsockname(ãœã±ãã)
ãªããžã§ã¯ãã«é¢é£ä»ããããããŒã«ã« ã¢ãã¬ã¹æ å ±ãè¿ããŸãã
ãã®ã¡ãœããã¯ãããŒã«ã« IP ã¢ãã¬ã¹ãšããŒãçªå·ãå«ãæååãè¿ããŸãã ã®
ãšã©ãŒã®å Žåãã¡ãœãã㯠nil ãè¿ããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
è¿å
ã¯ã©ã€ã¢ã³ãæ å ±ãå«ãæååã
Socket.receive(ãœã±ãã[, ãã¿ãŒã³[ã ãã¬ãã£ãã¯ã¹]])
æå®ãããèªã¿åããã¿ãŒã³ã«åŸã£ãŠãã¯ã©ã€ã¢ã³ã ãªããžã§ã¯ãããããŒã¿ãèªã¿åããŸãã ãã¿ãŒã³
Lua ãã¡ã€ã«ã® I/O 圢åŒã«æºæ ãããã¹ãŠã®ãã¡ã€ã«éã®ããã©ãŒãã³ã¹ã®éã
ãã¿ãŒã³ã¯ç¡èŠã§ããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
· ãã¿ãŒã³ (æåå|æŽæ°) -- å¿ èŠãªãã®ã説æããŠãã ãã (以äžãåç §)ã
· æ¥é èŸ (æåå) -- è¿ãããããŒã¿ã®ãã¬ãã£ãã¯ã¹ãšãªãæååã
è¿å
å¿ èŠãªããŒã¿ãŸã㯠nil ãå«ãæååã
ãã¿ãŒã³ã¯æ¬¡ã®ããããã§ãã
·
`*a`: èªã¿èŸŒã¿ ãã ã ãœã±ãã ãŸã§ ã æ¥ç¶ is éããã ããã
è¡æ«å€æãå®è¡ãããŸãã
·
`*l`: èªã¿èŸŒã¿ a ã©ã€ã³ of íŽëŒì°ë êž°ë° AI/MLë° ê³ ì±ë¥ 컎íší ì íµí ëì§íž ížìì êž°ìŽ â Edward Hsu, Rescale CPO ë§ì ìì§ëìŽë§ ì€ì¬ êž°ì ìê² íŽëŒì°ëë R&Dëì§íž ì íì 첫 ëšê³ìŒ ë¿ì ëë€. íŽëŒì°ë ììì íì©íŽ ìì§ëìŽë§ íì ì ìœì íŽê²°íë ëšê³ë¥Œ ëìŽ, ì뮬ë ìŽì ìŽìì íµí©íê³ ìµì ííë©°, ê¶ê·¹ì ìŒë¡ë ëªšëž êž°ë°ì íì 곌 ìì¬ ê²°ì ì ì§ìíì¬ ì ì íì ê²°ì í ë ë°ìŽí° êž°ë° ìì§ëìŽë§ì ì ì©íê³ ì í©ëë€. Rescaleì ìŽë¬í íì ì ëêž° ìíŽ ì»Žíší ì¶ì² ìì§, íµí© ë°ìŽí° íšëžëŠ, ë©íë°ìŽí° êŽëŠ¬ ë±ì ê°ë°íê³ ììµëë€. ìŽë² ì늬륌 ë¹ë € ë¹ìŠëì€ ê²œìë ¥ ì ê³ ë¥Œ ìí ëì§íž ížì ë° ëì§íž ì€ë ë ì ëµ ê°ë° ë°©ë²ì ëí ìžì¬ìŽížë¥Œ ëëê³ ì í©ëë€. ãã ã ãœã±ããã ã ã©ã€ã³ is çµãã by a
LF æå (ASCII 10)ããªãã·ã§ã³ã§ CR æå (ASCII 13) ãå è¡ããŸãã
CR ããã³ LF æåã¯ãè¿ãããè¡ã«ã¯å«ãŸããŸããã å®éã«ã¯ã
ãã¹ãŠã® CR æåã¯ãã¿ãŒã³ã«ãã£ãŠç¡èŠãããŸãã ãããããã©ã«ãã®ãã¿ãŒã³ã§ãã
·
æ°ïŒ åå ã æ¹æ³ ããž read a æå®ã® æ° of ãã€ã ãã ã
ãœã±ããã ãã¬ãã£ãã¯ã¹ã¯ãå é ã«é£çµãããªãã·ã§ã³ã®æååã§ã
è¿ãåã«åä¿¡ããããŒã¿ã®ã
· 空ã®: ãã¿ãŒã³ã空ã®å Žåãããã©ã«ãã®ãªãã·ã§ã³ã¯ *l.
æåããå Žåãã¡ãœããã¯åãåã£ããã¿ãŒã³ãè¿ããŸãã ãšã©ãŒã®å Žåã
ã¡ãœãã㯠nil ãè¿ãããã®åŸã«æåå 'closed' ã®ãšã©ãŒ ã¡ãã»ãŒãžãç¶ããŸã
éä¿¡ãå®äºããåã«æ¥ç¶ãéããããå ŽåããŸãã¯æåå
æäœäžã«ã¿ã€ã ã¢ãŠããçºçããå Žåã®ãã¿ã€ã ã¢ãŠããã ãŸãããšã©ãŒã®åŸã«
ã¡ãã»ãŒãžã®å Žåãé¢æ°ã¯éä¿¡ã®éšåçãªçµæãè¿ããŸãã
éèŠãªæ³šæ: ãã®é¢æ°ã¯å€§å¹ ã«å€æŽãããŸããã 以åã¯è€æ°ããµããŒãããŠããŸãã
ãã¿ãŒã³ (ãã ãããã®æ©èœã䜿çšãããŠããã®ãèŠãããšããããŸãã) ã§ãããçŸåšã¯äœ¿çšãããŠããŸããã
éšåçãªçµæã¯ãæåããçµæãšåãæ¹æ³ã§è¿ãããŠããŸããã ãã
æåŸã®æ©èœã¯ããã¹ãŠã®é¢æ°ããšã©ãŒæã« nil ãè¿ãã¹ãã§ãããšããèãã«éåããŠããŸããã ãããã£ãŠ
ãããå€æŽãããŸããã
Socket.send(ãœã±ããã ããŒã¿[ã å§ãã[ã çµãã]]ïŒ
ã¯ã©ã€ã¢ã³ã ãªããžã§ã¯ããä»ããŠããŒã¿ãéä¿¡ããŸãã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
· ããŒã¿ (æåå) -- éä¿¡ãããããŒã¿ã
· start (æŽæ°) -- ããŒã¿ã®ãããã¡å ã®éå§äœçœ®ã
éä¿¡ãããŸãã
· end (æŽæ°) -- ããŒã¿ã®ãããã¡å ã®çµäºäœçœ®ã
éä¿¡ãããŸããã
è¿å
äžèšåç §ã
ããŒã¿ã¯éä¿¡ããæååã§ãã ãªãã·ã§ã³ã®åŒæ° i ãš j ã¯ã
æšæºã® string.sub Lua é¢æ°ã䜿çšããŠãéä¿¡ããéšåæååãéžæã§ããããã«ããŸãã
æåããå Žåãã¡ãœãã㯠[start, end] å ã®æåŸã®ãã€ãã®ã€ã³ããã¯ã¹ãè¿ããŸãã
éä¿¡æžã¿ã§ãã start ã 1 ãŸãã¯ååšããªãå Žåãããã¯å®è³ªçã«
éä¿¡ãããåèšãã€ãæ°ã ãšã©ãŒã®å Žåãã¡ãœãã㯠nil ãè¿ãããã®åŸã«
ãšã©ãŒ ã¡ãã»ãŒãžã®åŸã«ã[start, end] å ã®æåŸã®ãã€ãã®ã€ã³ããã¯ã¹ãç¶ããŸãã
éãããŸããã ãã®æ¬¡ã®ãã€ãããããçŽããŠãã ããã ãšã©ãŒ
éä¿¡åã«æ¥ç¶ãéããããå Žåãã¡ãã»ãŒãžããéãããããšãã§ããŸã
å®äºããããåŠçäžã«ã¿ã€ã ã¢ãŠããçºçããå Žåã¯æåå 'timeout'
æäœã
泚: åºåã¯ãããã¡ãªã³ã°ãããŸããã å°ããæååã®å Žåã¯ãåžžã«é£çµããæ¹ããã
ããããLuaã§ïŒã..ãæŒç®åã䜿çšããŠïŒã代ããã«XNUMXåã®åŒã³åºãã§çµæãéä¿¡ããŸã
ã¡ãœãããæ°ååŒã³åºããŸãã
Socket.setoption(ãœã±ããã ãªãã·ã§ã³[ã 䟡å€]ïŒ
äºææ§ã®ããã«å®è£ ãããã ãã§ããã® cal ã¯äœãããŸããã
Socket.settimeout(ãœã±ããã 䟡å€[ã ã¢ãŒã]ïŒ
ãªããžã§ã¯ãã®ã¿ã€ã ã¢ãŠãå€ãå€æŽããŸãã ãã¹ãŠã® I/O æäœããããã¯ãããŠããŸãã ããã
ã€ãŸããsendãreceiveãaccept ã¡ãœããã®åŒã³åºãã¯ç¡æéã«ãããã¯ãããŸãã
æäœãå®äºãããŸã§ã settimeout ã¡ãœããã¯ãéã®å¶éãå®çŸ©ããŸã
I/O ã¡ãœããããããã¯ã§ããæéã ã¿ã€ã ã¢ãŠãæéãçµéãããšã圱é¿ãåãã
ã¡ãœããã¯ãããããŠããšã©ãŒ ã³ãŒãã§å€±æããŸãã
åŸ æ©ããæéã¯ãå€ãã©ã¡ãŒã¿ãŒãšããŠç§åäœã§æå®ãããŸãã
ã¿ã€ã ã¢ãŠã ã¢ãŒãã¯ãããã«ãã£ãŠå®è£ ãããèšå®å¯èœãªã¿ã€ã ã¢ãŠãã¯éã¢ã¯ãã£ãã®ã¿ã§ã
å éšãããã¡éä¿¡ã®å®äºãŸãã¯åä¿¡ããŒã¿ã®åŸ æ©æéã
Arguments
· ãœã±ãã (ã¯ã©ã¹ãœã±ãã) -- æäœããããœã±ããã§ãã
· å€ (æŽæ°) -- ã¿ã€ã ã¢ãŠãå€ã
class å°å³ïŒïŒ
ãã®ã¯ã©ã¹ã¯ãHAProxy ãããã§ã«ãã¯ã¢ãããè¡ãããšãèš±å¯ããŸãã 宣èšããããããã¯ã
ã©ã³ã¿ã€ã äžã« HAProxy 管çãœã±ãããä»ããŠå€æŽãããŸãã
ããã©ã«ã = ãç±³åœã
-- ãããã®äœæãšããŒã
geo = Map.new("geo.map", Map.ip);
-- ãŠãŒã¶ãŒã®åœãè¿ãæ°ãããã§ãããäœæããŸã
core.register_fetches("åœ", é¢æ°(txn)
ããŒã«ã«ãœãŒã¹;
ããŒã«ã« loc;
src = txn.f:fhdr("x-forwarded-for");
if (src == nil) then
src = txn.f:src()
if (src == nil) then
ããã©ã«ããè¿ããŸãã
end
end
-- ã«ãã¯ã¢ãããå®è¡
loc = geo:lookup(src);
if (loc == nil) then
ããã©ã«ããè¿ããŸãã
end
å Žæãè¿ããŸãã
çµããïŒ;
Map.int
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
ããã.ip HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
Map.str
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
å°å³.beg
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
ããããµã
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
Map.dir
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
ããã.ãã
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
ãããçµäº
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
å°å³.reg
HAProxy configuration.txt ãã¡ã€ã«ã®ãUsing ACLs and fetching samplesãã®ç« ãåç §ããŠãã ããã
ãã®ãã¿ãŒã³ ãããã³ã°æ¹æ³ãç解ããã«ã¯ããACL ã®åºç€ãã®ç« ãåç §ããŠãã ããã
Map.new(ãã¡ã€ã«ã æ¹æ³ïŒ
ããããäœæããŠããŒãããŸãã
Arguments
· file (æåå) -- ããããå«ããã¡ã€ã«ã§ãã
· æ¹æ³ (æŽæ°) -- ããã ãã¿ãŒã³ ãããã³ã°æ¹åŒã§ãã å±æ§ãèŠã
Map ã¯ã©ã¹ã®ã
è¿å
ã¯ã©ã¹ Map ãªããžã§ã¯ãã
èŠã ãããå±æ§ã
Map.lookup(ãããã str)
ãããã§ã«ãã¯ã¢ãããå®è¡ããŸãã
Arguments
· å°å³ (ã¯ã©ã¹ããã) -- ã¯ã©ã¹ Map ãªããžã§ã¯ãã§ãã
· STR (æåå) -- ããŒãšããŠäœ¿çšãããæååã§ãã
è¿å
çµæãå«ãæååãäžèŽããªãå Žå㯠nilã
Map.slookup(ãããã str)
ãããã§ã«ãã¯ã¢ãããå®è¡ããŸãã
Arguments
· å°å³ (ã¯ã©ã¹ããã) -- ã¯ã©ã¹ Map ãªããžã§ã¯ãã§ãã
· STR (æåå) -- ããŒãšããŠäœ¿çšãããæååã§ãã
è¿å
çµæãå«ãæååããŸãã¯äžèŽããªãå Žåã¯ç©ºã®æååã
class ã¢ãã¬ããHTTP()
ãã®ã¯ã©ã¹ã¯ããhttpãã¢ãŒããå¿ èŠãšããã¢ãã¬ããã§äœ¿çšãããŸãã http ã¢ãã¬ããã¯
ã«ç»é²ããã core.register_service() é¢æ°ã 圌ãã¯ã®ããã«äœ¿çšãããŸã
HAProxy ã®èåŸã«ãããµãŒããŒã®ããã« http ãªã¯ãšã¹ããåŠçããŸãã
ããã¯ãHello World ã®ãµã³ãã« ã³ãŒãã§ãã
core.register_service("hello-world", "http", é¢æ°(ã¢ãã¬ãã)
ããŒã«ã«å¿ç = "Hello World !"
ã¢ãã¬ãã:ã»ããã¹ããŒã¿ã¹(200)
ã¢ãã¬ãã:add_header("ã³ã³ãã³ãã®é·ã", string.len(å¿ç))
ã¢ãã¬ãã:add_header("ã³ã³ãã³ãã¿ã€ã", "ããã¹ã/ãã¬ãŒã³")
ã¢ãã¬ãã:start_response()
ã¢ãã¬ãã:éä¿¡(å¿ç)
çµããïŒ
ã¢ãã¬ããHTTP.c
è¿å
A ã³ã³ããŒã¿ class
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
ã¢ãã¬ããHTTP.sc
è¿å
A ã³ã³ããŒã¿ class
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãã®ãªããžã§ã¯ãã®æ©èœ
åžžã«æååãè¿ããŸãã
ã¢ãã¬ããHTTP.f
è¿å
A ãã§ãã class
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ã¢ãã¬ããã®å®è¡ã«æ³šæããŠãã ãã
place ã¯æå¹ãª HAProxy ã³ã¢ HTTP ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããªããããããã€ãã®ãµã³ãã«
HTTP ã«äŸåããå€ (hdrããã¹ãªã©) ã«é¢é£ããæ©èœã¯å©çšã§ããŸããã
ã¢ãã¬ããHTTP.sf
è¿å
A ãã§ãã class
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãã®ãªããžã§ã¯ãã®æ©èœ
åžžã«æååãè¿ããŸãã ã¢ãã¬ããã®å®è¡å Žæããã¯ã¢ã¯ã»ã¹ã§ããªãããšã«æ³šæããŠãã ããã
æå¹ãª HAProxy ã³ã¢ HTTP ãã©ã³ã¶ã¯ã·ã§ã³ãªã®ã§ãHTTP ã«é¢é£ããããã€ãã®ãµã³ãã« ãã§ã¯ã
äŸåå€ (hdrããã¹ãªã©) ã¯äœ¿çšã§ããŸããã
ã¢ãã¬ããHTTP.ã¡ãœãã
è¿å
æåå
å±æ§ã¡ãœããã¯ãHTTP ã¡ãœãããå«ãæååãè¿ããŸãã
AppletHTTP.ããŒãžã§ã³
è¿å
æåå
version å±æ§ã¯ãHTTP èŠæ±ã®ããŒãžã§ã³ãå«ãæååãè¿ããŸãã
ã¢ãã¬ããHTTP.ãã¹
è¿å
æåå
å±æ§ path ã¯ãHTTP èŠæ±ãã¹ãå«ãæååãè¿ããŸãã
ã¢ãã¬ããHTTP.qs
è¿å
æåå
å±æ§ qs ã¯ãHTTP èŠæ±ã¯ãšãªæååãå«ãæååãè¿ããŸãã
ã¢ãã¬ããHTTP.é·ã
è¿å
æŽæ°
å±æ§ length ã¯ãHTTP æ¬æã®é·ããå«ãæŽæ°ãè¿ããŸãã
ã¢ãã¬ããHTTP.headers
è¿å
é å
å±æ§ headers ã¯ãHTTP ããããŒãå«ãé åãè¿ããŸãã ããããŒ
ååã¯åžžã«å°æåã§ãã ããããŒåã¯
åãªã¯ãšã¹ã㧠0 åãå€ã¯æåã®ã€ã³ããã¯ã¹å€ãšã㊠XNUMX ã§ã€ã³ããã¯ã¹ä»ããããŸãã é å
次ã®åœ¢åŒããããŸãã
AppletHTTP.headers[' '][ ] = " "
AppletHTTP.headers["ãã¹ã"][0] = "www.test.com"
AppletHTTP.headers["accept"][0] = "audio/basic q=1"
AppletHTTP.headers["accept"][1] = "audio/*, q=0.2"
AppletHTTP.headers["accept"][2] = "*/*, q=0.1"
ã¢ãã¬ããHTTP.headers
ãã¹ãŠã®ãªã¯ãšã¹ã ããããŒãå«ãé åãå«ãŸããŸãã
AppletHTTP.set_status(ã¢ãã¬ããã ã³ãŒãïŒ
ãã®é¢æ°ã¯ãå¿çã® HTTP ã¹ããŒã¿ã¹ ã³ãŒããèšå®ããŸãã èš±å¯ãããã³ãŒãã¯
100ãž599ã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
· ã³ãŒã (æŽæ°) -- ã¯ã©ã€ã¢ã³ãã«è¿ãããã¹ããŒã¿ã¹ ã³ãŒãã
AppletHTTP.add_header(ã¢ãã¬ããã åã å€ïŒ
ãã®é¢æ°ã¯ãå¿çã«ããããŒãè¿œå ããŸãã éè€ããããããŒã¯æããããŸããŸããã
ç¹å¥ãªããã㌠ã³ã³ãã³ãã®é·ã å¿çã®é·ãã決å®ããããã«äœ¿çšãããŸãã ããã§ããã°
ååšããªãã 転éãšã³ã³ãŒãã£ã³ã°: ãã£ã³ã¯ èšå®ãããé¢æ°ããã®ãã¹ãŠã®æžã蟌ã¿
ã¢ãã¬ããHTTP:send() å¡ã«ãªãã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
· å (æåå) -- ããããŒå
· å€ (æåå) -- ããããŒå€
AppletHTTP.start_response(ã¢ãã¬ãã)
ãã®é¢æ°ã¯ãHTTP ãšã³ãžã³ã«ããããåŠçããŠéä¿¡ã§ããããšã瀺ããŸãã
å¿çããããŒã ãããåŒã³åºãããåŸãå¿çã«ããããŒãè¿œå ããããšã¯ã§ããŸããã ç§é
䜿çšã§ããŸãã ã¢ãã¬ããHTTP:send() é¢æ°ã®å Žå ã¢ãã¬ããHTTP:start_response() ã§ã¯ãããŸãã
ãšåŒã°ããŸãã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
AppletHTTP.getline(ã¢ãã¬ãã)
ãã®é¢æ°ã¯ãhttp æ¬æãã XNUMX è¡ãå«ãæååãè¿ããŸãã ããããŒã¿ã
è¿ãããããŒã¿ã«ã¯æçµç㪠'\n' ãå«ãŸããŠããŸãã
ã¹ããªãŒã çµäºåã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
è¿å
æååã ã¹ããªãŒã ã®æåŸã«å°éãããšãæååã空ã«ãªãããšããããŸãã
AppletHTTP.receive(ã¢ãã¬ãã[, ãµã€ãº]ïŒ
æå®ããã read ã«åŸã£ãŠãHTTP ããã£ããããŒã¿ãèªã¿åããŸãã ãµã€ãºã ãã ãµã€ãº is
æ¬ èœããŠããå Žåãé¢æ°ã¯ã¹ããªãŒã ã®ãã¹ãŠã®ã³ã³ãã³ããæåŸãŸã§èªã¿åãããšããŸãã ããã
ã ãµã€ãº http æ¬äœããã倧ããå Žåã䜿çšå¯èœãªããŒã¿éãè¿ããŸãã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
· ãµã€ãº (æŽæ°) -- å¿ èŠãªèªã¿åããµã€ãºã
è¿å
åžžã«æååãè¿ããŸããæ¥ç¶ãéããŠããå Žåãæååã¯ç©ºã«ããããšãã§ããŸãã
AppletHTTP.send(ã¢ãã¬ããã ã¡ãã»ãŒãž)
ã¡ãã»ãŒãžãéããŸã MSG http ãªã¯ãšã¹ãã®æ¬æã
Arguments
· ã¢ãã¬ãã (class_AppletHTTP) -- ã¢ã³ ã¢ãã¬ããHTTP class
· MSG (æåå) -- éä¿¡ããã¡ãã»ãŒãžã
class ã¢ãã¬ããTCP()
ãã®ã¯ã©ã¹ã¯ããtcpãã¢ãŒããå¿ èŠãšããã¢ãã¬ããã§äœ¿çšãããŸãã TCP ã¢ãã¬ããã¯
ã«ç»é²ãã core.register_service() é¢æ°ã ãããã¯åŠçã«äœ¿çšãããŸã
HAProxy ã®èåŸã«ãããµãŒããŒã®ãã㪠tcp ã¹ããªãŒã ã
ã¢ãã¬ããTCP.c
è¿å
A ã³ã³ããŒã¿ class
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
ã¢ãã¬ããTCP.sc
è¿å
A ã³ã³ããŒã¿ class
ãã®å±æ§ã«ã¯ãConverters ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã ãã®ãªããžã§ã¯ãã®æ©èœ
åžžã«æååãè¿ããŸãã
ã¢ãã¬ããTCP.f
è¿å
A ãã§ãã class
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
ã¢ãã¬ããTCP.sf
è¿å
A ãã§ãã class
ãã®å±æ§ã«ã¯ãFetches ã¯ã©ã¹ ãªããžã§ã¯ããå«ãŸããŸãã
AppletTCP.getline(ã¢ãã¬ãã)
ãã®é¢æ°ã¯ãã¹ããªãŒã ãã XNUMX è¡ãå«ãæååãè¿ããŸãã ããããŒã¿ã
è¿ãããããŒã¿ã«ã¯æçµç㪠'\n' ãå«ãŸããŠããŸãã
ã¹ããªãŒã çµäºåã
Arguments
· ã¢ãã¬ãã (class_AppletTCP) -- ã¢ã³ ã¢ãã¬ããTCP class
è¿å
æååã ã¹ããªãŒã ã®æåŸã«å°éãããšãæååã空ã«ãªãããšããããŸãã
AppletTCP.receive(ã¢ãã¬ãã[, ãµã€ãº]ïŒ
æå®ãããèªã¿åãã«åŸã£ãŠãTCP ã¹ããªãŒã ããããŒã¿ãèªã¿åããŸãã ãµã€ãºã ãã ãµã€ãº
ãèŠã€ãããªãå Žåãé¢æ°ã¯ã¹ããªãŒã ã®ãã¹ãŠã®ã³ã³ãã³ããæåŸãŸã§èªã¿åãããšããŸãã
Arguments
· ã¢ãã¬ãã (class_AppletTCP) -- ã¢ã³ ã¢ãã¬ããTCP class
· ãµã€ãº (æŽæ°) -- å¿ èŠãªèªã¿åããµã€ãºã
è¿å
åžžã«æååãè¿ããŸããæ¥ç¶ãéããŠããå Žåãæååã¯ç©ºã«ããããšãã§ããŸãã
AppletTCP.send(appletmsg)
ã¹ããªãŒã ã§ã¡ãã»ãŒãžãéä¿¡ããŸãã
Arguments
· ã¢ãã¬ãã (class_AppletTCP) -- ã¢ã³ ã¢ãã¬ããTCP class
· MSG (æåå) -- éä¿¡ããã¡ãã»ãŒãžã
å€ãã®äŸ¿å©ãª lua ã©ã€ãã©ãªãããã«ãããŸã:
· https://lua-toolbox.com/
Redis ã¢ã¯ã»ã¹:
· https://github.com/nrk/redis-lua
ããã¯ãHAProxy ã§ã® Redis ã©ã€ãã©ãªã®äœ¿çšã«é¢ããäŸã§ãã ååŒã³åºãã«æ³šæããŠãã ãã
ãœã±ããæ¥ç¶ã倱æããå Žåããã®ã©ã€ãã©ãªã®é¢æ°ã®ããããããšã©ãŒãã¹ããŒããå¯èœæ§ããããŸãã
-- redis ã©ã€ãã©ãªãããŒãããŸã
ããŒã«ã« redis = require("redis");
é¢æ° do_something(txn)
-- æ°ãã TCP ãœã±ãããäœæããŠæ¥ç¶ããŸã
ããŒã«ã« tcp = core.tcp();
TCP:ã¿ã€ã ã¢ãŠãã®èšå®ïŒ1ïŒ;
tcp: æ¥ç¶ ("127.0.0.1", 6379);
-- ãã®æ°ãããœã±ãã㧠redis ã©ã€ãã©ãªã䜿çšããŸã
ããŒã«ã« ã¯ã©ã€ã¢ã³ã = redis.connect({socket=tcp});
ã¯ã©ã€ã¢ã³ã:ping();
end
OpenSSLïŒ
· http://mkottman.github.io/luacrypto/index.html
· https://github.com/brunoos/luasec/wiki
onworks.net ãµãŒãã¹ã䜿çšããŠãªã³ã©ã€ã³ã§ haproxy-lua ã䜿çšãã