ืื ื’ืœื™ืชืฆืจืคืชื™ืชืกืคืจื“ื™

Ad


ืกืžืœ OnWorks

haproxy-lua - ืžืงื•ื•ืŸ ื‘ืขื ืŸ

ื”ืคืขืœ ืืช haproxy-lua ื‘ืกืคืง ืื™ืจื•ื— ื—ื™ื ืžื™ ืฉืœ OnWorks ืขืœ ืื•ื‘ื•ื ื˜ื• ืžืงื•ื•ืŸ, ืคื“ื•ืจื” ืžืงื•ื•ืŸ, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ื–ื•ื”ื™ ื”ืคืงื•ื“ื” haproxy-lua ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ื‘ืกืคืง ื”ืื™ืจื•ื— ื”ื—ื™ื ืžื™ ืฉืœ OnWorks ื‘ืืžืฆืขื•ืช ืื—ืช ืžืชื—ื ื•ืช ื”ืขื‘ื•ื“ื” ื”ืžืงื•ื•ื ื•ืช ื”ืžืจื•ื‘ื•ืช ืฉืœื ื•, ื›ื’ื•ืŸ Ubuntu Online, Fedora Online, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ืชึธื›ึฐื ึดื™ืช:

ืฉืึตื


haproxy-lua - haproxy-lua ืชื™ืขื•ื“

HAPROXY LUA ืจืฅ ื”ืงืฉืจื™ื


ื ื™ืชืŸ ืœืขื‘ื“ ืืช ืงื•ื“ Lua ื”ืžื‘ื•ืฆืข ื‘-HAProxy ื‘ืฉื ื™ ืžืฆื‘ื™ื ืขื™ืงืจื™ื™ื. ื”ืจืืฉื•ืŸ ื”ื•ื ื”
ืืชื—ื•ืœ ืžืฆื‘, ื•ื”ืฉื ื™ ื”ื•ื ื” ื–ืžืŸ ืจื™ืฆื” ืžืฆื‘.

ยท ื‘ืชื•ืš ื” ืืชื—ื•ืœ ืžืฆื‘, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืคืชืจื•ื ื•ืช DNS, ืื‘ืœ ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืฉืงืข I/O.
ื‘ืžืฆื‘ ืืชื—ื•ืœ ื–ื”, HAProxy ืขื“ื™ื™ืŸ ื ื—ืกืžื” ื‘ืžื”ืœืš ื‘ื™ืฆื•ืข ื”-Lua
ืชื›ื ื™ืช.

ยท ื‘ืชื•ืš ื” ื–ืžืŸ ืจื™ืฆื” ืžืฆื‘, ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืคืชืจื•ื ื•ืช DNS, ืื‘ืœ ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืฉืงืขื™ื. ื”
ื‘ื™ืฆื•ืข ืงื•ื“ Lua ืžืฉื•ืœื‘ ืขื ืขื™ื‘ื•ื“ ื”ื‘ืงืฉื•ืช, ื›ืš ืฉืงื•ื“ Lua
ื ืจืื” ืฉื”ื•ื ืžื•ืคืขืœ ื‘ื—ืกื™ืžื”, ืื‘ืœ ื–ื” ืœื ื”ืžืงืจื”.

ืงื•ื“ Lua ื ื˜ืขืŸ ื‘ืงื•ื‘ืฅ ืื—ื“ ืื• ื™ื•ืชืจ. ืงื‘ืฆื™ื ืืœื” ืžื›ื™ืœื™ื ืงื•ื“ ื•ืคื•ื ืงืฆื™ื•ืช ืจืืฉื™ื•ืช.
ืœ-Lua ื™ืฉ 6 ื”ืงืฉืจื™ ื‘ื™ืฆื•ืข.

1. ืงื•ื‘ืฅ Lua ื’ื•ึผืฃ ื”ืงืฉืจ. ื–ื” ืžื‘ื•ืฆืข ื‘ืžื”ืœืš ื”ื˜ืขื™ื ื” ืฉืœ ืงื•ื‘ืฅ Lua ื‘-
HAProxy [ื”ืขื•ืœืžื™] ืกืขื™ืฃ ืขื ื”ื”ื ื—ื™ื” lua-load. ื–ื” ืžื‘ื•ืฆืข ื‘ืืชื—ื•ืœ
ืžืฆื‘. ืกืขื™ืฃ ื–ื” ืžืฉืžืฉ ืœื”ื’ื“ืจืช ื›ืจื™ื›ื•ืช Lua ื‘-HAProxy.

2. ื”ืœื•ืื” init ื”ืงืฉืจ. ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ืžื™ื“ ืœืื—ืจ ื”-HAProxy
ื ื™ืชื•ื— ืชืฆื•ืจื”. ื”ื‘ื™ืฆื•ืข ื ืžืฆื ื‘ืžืฆื‘ ืืชื—ื•ืœ. ื‘ื”ืงืฉืจ ื–ื” ื”
ืกื‘ื™ื‘ืช HAProxy ื›ื‘ืจ ืืชื—ื•ืœื”. ื–ื” ืฉื™ืžื•ืฉื™ ื›ื“ื™ ืœื‘ื“ื•ืง ืชืฆื•ืจื”, ืื•
ืืชื—ื•ืœ ื—ื™ื‘ื•ืจื™ ืฉืงืขื™ื ืื• ืžืฉื™ืžื•ืช. ืคื•ื ืงืฆื™ื•ืช ืืœื• ืžื•ืฆื”ืจื•ืช ื‘ื’ื•ืฃ
ื”ืงืฉืจ ืขื ื”ืคื•ื ืงืฆื™ื” Lua core.register_init(). ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื”ื•ื ื
ืคื•ื ืงืฆื™ื” ืคืฉื•ื˜ื” ืœืœื ืขืจืš ื”ื—ื–ืจื” ื•ืœืœื ืคืจืžื˜ืจื™ื, ื›ืš: ืคื•ื ืงืฆื™ื” fcn().

3. ื”ืœื•ืื” ืžืฉื™ืžื” ื”ืงืฉืจ. ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ืœืื—ืจ ืชื—ื™ืœืช ื”- HAProxy
ืžืชื–ืžืŸ, ื•ืžื™ื“ ืœืื—ืจ ื”ื”ื›ืจื–ื” ืขืœ ื”ืžืฉื™ืžื” ืขื ื”ืคื•ื ืงืฆื™ื” Lua
core.register_task(). ื”ืงืฉืจ ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ืžืงื‘ื™ืœ ืœืขื™ื‘ื•ื“ ื”ืชืขื‘ื•ืจื”. ื–ื”
ืžื‘ื•ืฆืข ื‘ืžืฆื‘ ื–ืžืŸ ืจื™ืฆื”. ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื”ื•ื ืคื•ื ืงืฆื™ื” ืคืฉื•ื˜ื” ืœืœื
ืขืจืš ื”ื—ื–ืจ ื•ืœืœื ืคืจืžื˜ืจื™ื, ื›ืš: ืคื•ื ืงืฆื™ื” fcn().

4. ืคืขื•ืœื” ื”ืงืฉืจ. ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ื‘ืื•ืคืŸ ืžื•ืชื ื”. ืคืขื•ืœื•ืช ืืœื• ื”ืŸ
ืจืฉื•ื ืœืคื™ ื”ื ื—ื™ื•ืช Lua "core.register_action()". ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืœื•ืื”
ืฉื ืงืจื ืคื•ื ืงืฆื™ื” ื”ื™ื ืคื•ื ืงืฆื™ื” ืขื ืœื ืžื—ื–ื™ืจื” ื›ืœื•ื ื•ืืฉืจ ืœื•ืงื—ืช ืื•ื‘ื™ื™ืงื˜ ืฉืœ
ืžื—ืœืงื” TXN ื›ืขืจืš. ืคื•ื ืงืฆื™ื” fcn(txn).

5. ื”ื‘ืืช ื“ื’ื™ืžื” ื”ืงืฉืจ. ืคื•ื ืงืฆื™ื” ื–ื• ืœื•ืงื—ืช ืื•ื‘ื™ื™ืงื˜ TXN ื›ืืจื’ื•ืžื ื˜ ื›ื ื™ืกื” ื•
ืžื—ื–ื™ืจ ืžื—ืจื•ื–ืช. ืกื•ื’ื™ื ืืœื” ืฉืœ ืคื•ื ืงืฆื™ื•ืช ืื™ื ื ื™ื›ื•ืœื™ื ืœื‘ืฆืข ืคื•ื ืงืฆื™ื™ืช ื—ืกื™ืžื” ื›ืœืฉื”ื™. ื”ึตื
ืฉื™ืžื•ืฉื™ื™ื ืœืื™ืกื•ืฃ ื—ืœืง ืžื”ื“ื’ื™ืžื•ืช ื”ืžืงื•ืจื™ื•ืช ืฉืœ HAProxy ื•ืœื”ื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื”.
ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื”ื•ื ืคื•ื ืงืฆื™ื” ืžื—ืจื•ื–ืช fcn(txn). ืคื•ื ืงืฆื™ื•ืช ืืœื” ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช
ืจืฉื•ื ืขื ื”ืคื•ื ืงืฆื™ื” Lua core.register_fetches(). ื›ืœ ื“ื•ื’ืžื”-ืฉืœื™ืคืช ืžื•ืฆื”ืจืช ื”ื™ื
ืงื™ื“ื•ืžืช ื”ืžื—ืจื•ื–ืช "lua.".

ื”ืขืจื”: ื™ื™ืชื›ืŸ ืฉืคื•ื ืงืฆื™ื” ื–ื• ืœื ื™ื›ื•ืœื” ืœืžืฆื•ื ืืช ื”ื ืชื•ื ื™ื ื”ื ื“ืจืฉื™ื ื‘ืžืงื•ืจ
ื“ื’ื™ืžืช HAProxy ืžื‘ื™ืื”, ื‘ืžืงืจื” ื–ื”, ื”ื™ื ืœื ื™ื›ื•ืœื” ืœื”ื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื”. ื”ืžืงืจื” ื”ื–ื” ืขื“ื™ื™ืŸ ืœื
ื ืชืžืš

6. ืžึตืžึดื™ืจ ื”ืงืฉืจ. ื–ื•ื”ื™ ืคื•ื ืงืฆื™ื™ืช Lua ืฉืœื•ืงื—ืช ืžื—ืจื•ื–ืช ื›ืงืœื˜ ื•ืžื—ื–ื™ืจื”
ืžื—ืจื•ื–ืช ื ื•ืกืคืช ื›ืคืœื˜. ืคื•ื ืงืฆื™ื•ืช ืžืกื•ื’ ื–ื” ื”ืŸ ื—ืกืจื•ืช ืžื“ื™ื ื”, ื•ืื™ืŸ ืœื”ืŸ ื’ื™ืฉื” ืืœื™ื”ืŸ
ื›ืœ ื”ืงืฉืจ. ื”ื ืœื ืžื‘ืฆืขื™ื ืฉื•ื ืคื•ื ืงืฆื™ื™ืช ื—ืกื™ืžื”. ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืฉื™ื—ื” ื”ื•ื ืคื•ื ืงืฆื™ื”
ืžื—ืจื•ื–ืช fcn(string). ื ื™ืชืŸ ืœืจืฉื•ื ืคื•ื ืงืฆื™ื” ื–ื• ืขื ื”ืคื•ื ืงืฆื™ื” Lua
core.register_converters(). ื›ืœ ืžืžื™ืจ ืžื•ื›ืจื– ืžืงื‘ืœ ืืช ื”ืงื™ื“ื•ืžืช ืฉืœ ื”ืžื—ืจื•ื–ืช "lua.".

HAPROXY LUA ืฉืœื•ื ื‘ืขื•ืœื


ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ HAProxy (hello_world.conf):

ื’ืœื•ึนื‘ึผึธืœึดื™
lua-load hello_world.lua

ื”ืื–ื ื” ืคืจื•ืงืกื™
ืœืื’ื“ 127.0.0.1:10001
tcp-request inspect-delay 1s
tcp-request content use-service lua.hello_world

ืงื•ื‘ืฅ HAProxy Lua (hello_world.lua):

core.register_service("hello_world", "tcp", function(ื™ื™ืฉื•ืžื•ืŸ)
applet:send("ืฉืœื•ื ืขื•ืœื\n")
ืกื•ืฃ)

ื›ื™ืฆื“ ืœื”ืคืขื™ืœ ืืช HAProxy ืœื‘ื“ื™ืงืช ืชืฆื•ืจื” ื–ื•:

./haproxy -f hello_world.conf

ื‘ืžืกื•ืฃ ืื—ืจ, ืืชื” ื™ื›ื•ืœ ืœื‘ื“ื•ืง ืขื telnet:

#:~ telnet 127.0.0.1 10001
ืฉืœื•ื ืขื•ืœื

ื‘ื›ื™ืชื” ื”ืœื™ื‘ื”()
ืžื—ืœืงืช "ื”ืœื™ื‘ื”" ืžื›ื™ืœื” ืืช ื›ืœ ืคื•ื ืงืฆื™ื•ืช ื”ืœื™ื‘ื” ืฉืœ HAProxy. ืคื•ื ืงืฆื™ื•ืช ืืœื• ืฉื™ืžื•ืฉื™ื•ืช
ืœืฉืœื™ื˜ื” ื‘ื–ืจื™ืžืช ื”ื‘ื™ืฆื•ืข, ืจื™ืฉื•ื ื•ื•ื™ื, ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืคื•ืช ื’ืœื•ื‘ืœื™ื•ืช
ืื• ACL,...

ืžื—ืœืงื” "ื”ืœื™ื‘ื”" ืžืกื•ืคืงืช ื‘ืขืฆื ืขื HAProxy. ืœื ืœื“ืจื•ืฉ ืงื• ื ื“ืจืฉ ืœ
ืžืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื•ืช ื”ืœืœื•.

ื”ืžื—ืœืงื” "ื”ืœื™ื‘ื”" ื”ื™ื ืกื˜ื˜ื™ืช, ืœื ื ื™ืชืŸ ืœื™ืฆื•ืจ ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ ืžืกื•ื’ ื–ื”.

core.emerg

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”ื™ื•ืžืŸ "ื—ื™ืจื•ื"
(0).

core.alert

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ "ื”ืชืจืื”" ื‘ืจืžืช ื”ื™ื•ืžืŸ (1).

core.crit

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”ืœื•ื’ "ืงืจื™ื˜ื™ืช" (2).

core.err

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ "ืฉื’ื™ืื”" ื‘ืจืžืช ื”ืœื•ื’ (3).

ืื–ื”ืจื”

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”ื™ื•ืžืŸ "ืื–ื”ืจื”" (4).

core.notice

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”-loglevel "ื”ื•ื“ืขื”" (5).

core.info

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”-loglevel "info" (6).

core.debug

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืชื›ื•ื ื” ื–ื• ื”ื™ื ืžืกืคืจ ืฉืœื, ื”ื™ื ืžื›ื™ืœื” ืืช ื”ืขืจืš ืฉืœ ืจืžืช ื”-loglevel "debug" (7).

core.log(loglevel, msg)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ืคื•ื ืงืฆื™ื” ื–ื• ืฉื•ืœื—ืช ื™ื•ืžืŸ. ื”ื™ื•ืžืŸ ื ืฉืœื—, ื‘ื”ืชืื ืœ-HAProxy
ืงื•ื‘ืฅ ืชืฆื•ืจื”, ื‘ืฉืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ syslog ืื ื”ื•ื ืžื•ื’ื“ืจ ื•ื‘-
stderr ืื ื–ื” ืžื•ืชืจ.

ื˜ื™ืขื•ื ื™ื

ยท ืจืžืช ื™ื•ืžืŸ (ืžืกืคืจ ืฉืœื) -- ื”ืื ืจืžืช ื”ื™ื•ืžืŸ ืžืฉื•ื™ื›ืช ืœื”ื•ื“ืขื”. ื–ื”
ืžืกืคืจ ื‘ื™ืŸ 0 ืœ-7.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช core.emerg, core.alert, core.crit, core.err, core.warning, core.notice,
core.info, core.debug (ื”ื’ื“ืจื•ืช ื‘ืจืžืช ื™ื•ืžืŸ)

ืœึดืจึฐืื•ึนืช code.Debug

ืœึดืจึฐืื•ึนืช core.Info

ืœึดืจึฐืื•ึนืช core.ืื–ื”ืจื”

ืœึดืจึฐืื•ึนืช core.Alert

core.Debug(ืžืกื’)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื˜ื™ืขื•ื ื™ื

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช ื”ื™ื›ื ืก

ืขื•ืฉื” ืืช ืื•ืชื” ืขื‘ื•ื“ื” ืžืืฉืจ:

ืคื•ื ืงืฆื™ื” ืœื ืคื•ืช(ืžืกื’)
core.log(core.debug, msg)
ืกื•ืฃ

core.Info(ืžืกื’)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื˜ื™ืขื•ื ื™ื

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช ื”ื™ื›ื ืก

ืคื•ื ืงืฆื™ื” ืžื™ื“ืข(ืžืกื’)
core.log(core.info, msg)
ืกื•ืฃ

core.ืื–ื”ืจื”(ืžืกื’)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื˜ื™ืขื•ื ื™ื

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช ื”ื™ื›ื ืก

ืคื•ื ืงืฆื™ื” ืื–ื”ืจื”(ืžืกื’)
core.log(core.warning, msg)
ืกื•ืฃ

core.Alert(ืžืกื’)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื˜ื™ืขื•ื ื™ื

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช ื”ื™ื›ื ืก

ืคื•ื ืงืฆื™ื” ืขืจื ื™(ืžืกื’)
core.log(core.alert, msg)
ืกื•ืฃ

core.add_acl(ืฉื ืงื•ื‘ืฅ, ืžึทืคึฐืชึตื—ึท)
ื”ืงืฉืจ: init, task, action, sample-fetch, converter

ื”ื•ืกืฃ ืืช ื”-ACL ืžืคืชื— ื‘ืจืฉื™ืžืช ACLs ืฉืืœื™ื• ื”ืงื•ื‘ืฅ ืžืคื ื” ืฉื ื”ืงื•ื‘ืฅ.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื ื”ืงื•ื‘ืฅ (ืžื—ืจื•ื–ืช) -- ืฉื ื”ืงื•ื‘ืฅ ืฉืžืชื™ื™ื—ืก ืœืขืจื›ื™ ื”-ACL.

ยท ืžืคืชื— (ืžื—ืจื•ื–ืช) -- ื”ืžืคืชื— ืฉื™ืชื•ื•ืกืฃ.

core.del_acl(ืฉื ืงื•ื‘ืฅ, ืžึทืคึฐืชึตื—ึท)
ื”ืงืฉืจ: init, task, action, sample-fetch, converter

ืžื—ืง ืืช ืขืจืš ื”-ACL ืืœื™ื• ืžืชื™ื™ื—ืก ื”ืžืคืชื— ืžืคืชื— ื‘ืจืฉื™ืžืช ื”-ACLs ืฉืืœื™ื”ื ืžืชื™ื™ื—ืกื™ื
ืฉื ื”ืงื•ื‘ืฅ.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื ื”ืงื•ื‘ืฅ (ืžื—ืจื•ื–ืช) -- ืฉื ื”ืงื•ื‘ืฅ ืฉืžืชื™ื™ื—ืก ืœืขืจื›ื™ ื”-ACL.

ยท ืžืคืชื— (ืžื—ืจื•ื–ืช) -- ื”ืžืคืชื— ืฉื™ื™ืžื—ืง.

core.del_map(ืฉื ืงื•ื‘ืฅ, ืžึทืคึฐืชึตื—ึท)
ื”ืงืฉืจ: init, task, action, sample-fetch, converter

ืžื—ืง ืืช ืขืจืš ื”ืžืคื” ื‘ืื™ื ื“ืงืก ืขื ื”ืžืคืชื— ืฉืฆื•ื™ืŸ ื‘ืจืฉื™ืžืช ื”ืžืคื•ืช ืฉืืœื™ื”ืŸ ืžืชื™ื™ื—ืกื™ื
ืœืคื™ ืฉื ื”ืงื•ื‘ืฅ ืฉืœื•.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื ื”ืงื•ื‘ืฅ (ืžื—ืจื•ื–ืช) -- ืฉื ื”ืงื•ื‘ืฅ ืฉืžืชื™ื™ื—ืก ืœืขืจื›ื™ ื”ืžืคื”.

ยท ืžืคืชื— (ืžื—ืจื•ื–ืช) -- ื”ืžืคืชื— ืฉื™ื™ืžื—ืง.

core.msleep(ืžื™ืœื™ืฉื ื™ื•ืช)
ื”ืงืฉืจ: ื’ื•ืฃ, ื”ืชื—ืœื”, ืžืฉื™ืžื”, ืคืขื•ืœื”

ืืœ ื”ืื ื™ core.msleep() ืžืคืกื™ืง ืืช ื‘ื™ืฆื•ืข Lua ื‘ื™ืŸ ืืœืคื™ื•ืช ืฉื ื™ื•ืช ืฉืฆื•ื™ื ื•.

ื˜ื™ืขื•ื ื™ื

ยท ืžื™ืœื™ ืฉื ื™ื•ืช (ืžืกืคืจ ืฉืœื) -- ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื” ื”ื ื“ืจืฉื•ืช.

core.register_action(ืฉื, ืคืขื•ืœื•ืช, func)
ื”ืงืฉืจ: ื’ื•ืฃ

ืจืฉื•ื ืคื•ื ืงืฆื™ื™ืช Lua ืฉื‘ื•ืฆืขื” ื›ืคืขื•ืœื”. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื”ืคืขื•ืœื” ื”ืจืฉื•ืžื”
ื‘-HAProxy ืขื ื”ืงื™ื“ื•ืžืช "lua.". ืคืขื•ืœื” ืžืงื‘ืœืช ืžื—ืœืงืช ืื•ื‘ื™ื™ืงื˜ TXN ื›ืงืœื˜.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ื”ื•ื ื”ืฉื ืฉืœ ื”ืžืžื™ืจ.

ยท ืคืขื•ืœื•ืช (ืฉื•ืœื—ืŸ) -- ื”ื™ื ื˜ื‘ืœืช ืžื—ืจื•ื–ืช ื”ืžืชืืจืช โ€‹โ€‹ืืช ืคืขื•ืœื•ืช HAProxy ืžื™
ืจื•ืฆื” ืœื”ื™ืจืฉื ืœ. ื”ืคืขื•ืœื•ืช ื”ืฆืคื•ื™ื•ืช ื”ืŸ 'tcp-req', 'tcp-res',
'http-req' ืื• 'http-res'.

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ื”ืคื•ื ืงืฆื™ื” Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื›ืžืžื™ืจ.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

function(txn)

ยท

txn (TXN ื‘ื›ื™ืชื”): ื–ึถื” is a TXN ืื•ื‘ื™ื™ืงื˜ ืžึฐืฉืื•ึผืžึธืฉื ืœ ืžื ื™ืคื•ืœืฆื™ื” ืžื” ื”ื™ื
ื‘ืงืฉื” ื ื•ื›ื—ื™ืช ืื• ื–ืจื TCP.

ื”ื ื”, ื“ื•ื’ืžื” ืœืจื™ืฉื•ื ืคืขื•ืœื”. ื”ืคืขื•ืœื” ืคืฉื•ื˜ ืœืฉืœื•ื— 'ืฉืœื•ื ืขื•ืœื' ื‘
ื™ื•ืžื ื™ื.

core.register_action("hello-world", { "tcp-req", "http-req" }, function(txn)
txn:Info("ืฉืœื•ื ืขื•ืœื")
ืกื•ืฃ)
ืงื•ื“ ื“ื•ื’ืžื” ื–ื” ืžืฉืžืฉ ื‘ืชืฆื•ืจืช HAproxy ื›ืš:

frontend tcp_frt
ืžืฆื‘ tcp
ืชื•ื›ืŸ tcp-request lua.hello-world

ื—ื–ื™ืช http_frt
ืžืฆื‘ http
http-request lua.hello-world

core.register_converters(ืฉื, func)
ื”ืงืฉืจ: ื’ื•ืฃ

ืจืฉื•ื ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ื›ืžืžื™ืจ. ื›ืœ ื”ืžืžื™ืจื™ื ื”ืจืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช
ื‘ืฉื™ืžื•ืฉ ื‘-HAProxy ืขื ื”ืงื™ื“ื•ืžืช "lua.". ืžืžื™ืจ ืžืงื‘ืœ ืžื—ืจื•ื–ืช ื›ืงืœื˜ ื•
ืœื”ื—ื–ื™ืจ ืžื—ืจื•ื–ืช ื›ืคืœื˜. ื”ืคื•ื ืงืฆื™ื” ื”ืจืฉื•ืžื” ื™ื›ื•ืœื” ืœืงื—ืช ืขื“ 9 ืขืจื›ื™ื ื›
ืคึผึธืจึธืžึถื˜ึถืจ. ื›ืœ ื”ืขืจื›ื™ื ื”ื ืžื—ืจื•ื–ื•ืช.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ื”ื•ื ื”ืฉื ืฉืœ ื”ืžืžื™ืจ.

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ื”ืคื•ื ืงืฆื™ื” Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื›ืžืžื™ืจ.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

function(str, [p1 [, p2 [, ... [, p5]]]])

ยท str (ืžื—ืจื•ื–ืช): ื–ื”ื• ืขืจืš ื”ืงืœื˜ ื”ืžื•ืžืจ ืื•ื˜ื•ืžื˜ื™ืช ื‘ืžื—ืจื•ื–ืช.

ยท p1 .. p5 (ืžื—ืจื•ื–ืช): ื–ื•ื”ื™ ืจืฉื™ืžื” ืฉืœ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื—ืจื•ื–ืช ื”ืžื•ืฆื”ืจืช ื‘ื”ืจื•ืงืก
ืงื•ื‘ืฅ ืชืฆื•ืจื”. ืžืกืคืจ ื”ืืจื’ื•ืžื ื˜ื™ื ืื™ื ื• ืขื•ืœื” ืขืœ 5. ื”ืกื“ืจ ื•ื”-
ื”ืื•ืคื™ ืฉืœ ืืœื” ื ื‘ื—ืจ ื‘ื“ืจืš ื›ืœืœ ืขืœ ื™ื“ื™ ื”ืžืคืชื—.

core.register_fetches(ืฉื, func)
ื”ืงืฉืจ: ื’ื•ืฃ

ืจืฉื•ื ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ื›ืื—ื–ื•ืจ ืœื“ื•ื’ืžื”. ื›ืœ ื”ื‘ืื˜ื•ืช ื”ืžื“ื’ื ื”ืจืฉื•ืžื•ืช
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘-HAProxy ืขื ื”ืงื™ื“ื•ืžืช "lua.". ืื—ื–ื•ืจ ืžื“ื’ื Lua ืžื—ื–ื™ืจ ืžื—ืจื•ื–ืช
ื‘ืชื•ืจ ืคืœื˜. ื”ืคื•ื ืงืฆื™ื” ื”ืจืฉื•ืžื” ื™ื›ื•ืœื” ืœืงื—ืช ืขื“ 9 ืขืจื›ื™ื ื›ืคืจืžื˜ืจ. ื›ืœ ื”
ืขืจืš ื”ื ืžื—ืจื•ื–ื•ืช.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ื”ื•ื ื”ืฉื ืฉืœ ื”ืžืžื™ืจ.

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ื”ืคื•ื ืงืฆื™ื” Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื‘ืชื•ืจ ืื—ื–ื•ืจ ืœื“ื•ื’ืžื”.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

ืคื•ื ืงืฆื™ื™ืช ืžื—ืจื•ื–ืช (txn, [p1 [, p2 [, ... [, p5]]]])

ยท txn (TXN ื‘ื›ื™ืชื”): ื–ื”ื• ื”ืื•ื‘ื™ื™ืงื˜ txn ื”ืžืฉื•ื™ืš ืœื‘ืงืฉื” ื”ื ื•ื›ื—ื™ืช.

ยท p1 .. p5 (ืžื—ืจื•ื–ืช): ื–ื•ื”ื™ ืจืฉื™ืžื” ืฉืœ ืืจื’ื•ืžื ื˜ื™ื ืฉืœ ืžื—ืจื•ื–ืช ื”ืžื•ืฆื”ืจืช ื‘ื”ืจื•ืงืก
ืงื•ื‘ืฅ ืชืฆื•ืจื”. ืžืกืคืจ ื”ืืจื’ื•ืžื ื˜ื™ื ืื™ื ื• ืขื•ืœื” ืขืœ 5. ื”ืกื“ืจ ื•ื”-
ื”ืื•ืคื™ ืฉืœ ืืœื” ื ื‘ื—ืจ ื‘ื“ืจืš ื›ืœืœ ืขืœ ื™ื“ื™ ื”ืžืคืชื—.

ยท ื”ื—ื–ืจื™ื: ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ื ืชื•ื ื™ื ืžืกื•ื™ืžื™ื, ot nil ืื ืœื ื ื™ืชืŸ ืœื”ื—ื–ื™ืจ ืืช ื”ืขืจืš ื›ืขืช.

ืงื•ื“ ืœื“ื•ื’ืžื:

core.register_fetches("ืฉืœื•ื", function(txn)
ื”ื—ื–ืจ "ืฉืœื•ื"
ืกื•ืฃ)
ืชืฆื•ืจื” ืœื“ื•ื’ืžื” ืฉืœ HAProxy:

ื“ื•ื’ืžื” ื—ื–ื™ืชื™ืช
http-request location /%[lua.hello]

core.register_service(ืฉื, ืžืฆื‘, func)
ื”ืงืฉืจ: ื’ื•ืฃ

ืจืฉื•ื ืคื•ื ืงืฆื™ื™ืช Lua ื”ืžื‘ื•ืฆืขืช ื›ืฉื™ืจื•ืช. ื›ืœ ื”ืฉื™ืจื•ืช ื”ืจืฉื•ื ื™ื›ื•ืœ ืœื”ื™ื•ืช
ื‘ืฉื™ืžื•ืฉ ื‘-HAProxy ืขื ื”ืงื™ื“ื•ืžืช "lua.". ืฉื™ืจื•ืช ืžืงื‘ืœ ืžื—ืœืงืช ืื•ื‘ื™ื™ืงื˜ ื›ืงืœื˜
ื‘ื”ืชืื ืœืžืฆื‘ ื”ื ื“ืจืฉ.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ื”ื•ื ื”ืฉื ืฉืœ ื”ืžืžื™ืจ.

ยท ืžืฆื‘ (ืžื—ืจื•ื–ืช) -- ื”ื™ื ืžื—ืจื•ื–ืช ื”ืžืชืืจืช โ€‹โ€‹ืืช ื”ืžืฆื‘ ื”ื ื“ืจืฉ. ืจืง 'tcp' ืื•
'http' ืžื•ืชืจื™ื.

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ื”ืคื•ื ืงืฆื™ื” Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื›ืžืžื™ืจ.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

ืคื•ื ืงืฆื™ื” (ื™ื™ืฉื•ืžื•ืŸ)

ยท ื”ื™ื™ืฉื•ืžื•ืŸ ื”ื™ื™ืฉื•ืžื•ืŸ ื™ื”ื™ื” AppletTCP ื‘ื›ื™ืชื” ืื• AppletHTTP ื‘ื›ื™ืชื”. ื–ื” ืชืœื•ื™ ื‘ืกื•ื’
ืฉืœ ื™ื™ืฉื•ืžื•ืŸ ืจืฉื•ื. ื™ื™ืฉื•ืžื•ืŸ ืจืฉื•ื ืขื ื”ืขืจืš 'http' ืขื‘ื•ืจ ื” ืžืฆื‘
ืคืจืžื˜ืจ ื™ืงื‘ืœ ื AppletHTTP ื‘ื›ื™ืชื”. ืื ืžืฆื‘ ื”ืขืจืš ื”ื•ื 'tcp', ื”ื™ื™ืฉื•ืžื•ืŸ ื™ื”ื™ื”
ืžืงื‘ืœ AppletTCP ื‘ื›ื™ืชื”.

ืื–ื”ืจื”: ืœื ื ื™ืชืŸ ืœืงืจื•ื ืœื™ื™ืฉื•ืžื•ื ื™ื ืžืกื•ื’ 'http' ืžืชื•ืš 'tcp-' ืขืจื›ื™ ื›ืœืœื™ื. ืจืง ืžื” ื”ื™ื 'http-'
ืขืจื›ื™ ื›ืœืœื™ื ืžื•ืจืฉื™ื, ื–ื” ืื•ืžืจ ืฉืœื ื ื™ืชืŸ ืœืงืจื•ื ืœื™ื™ืฉื•ืžื•ืŸ HTTP ืž-a
ืคืจื•ืงืกื™ ื‘ืžืฆื‘ tcp. ื ื™ืชืŸ ืœืงืจื•ื ืœื™ื™ืฉื•ืžื•ื ื™ื ืžืกื•ื’ 'tcp' ืžื›ืœ ืžืงื•ื.

ื”ื ื”, ื“ื•ื’ืžื” ืœืจื™ืฉื•ื ืฉื™ืจื•ืช. ื”ืฉื™ืจื•ืช ืคืฉื•ื˜ ืฉืœื— 'ืฉืœื•ื ืขื•ืœื' ื‘ืชื•ืจ
ืชื’ื•ื‘ืช http.

core.register_service("hello-world", "http", function(applet)
ืชื’ื•ื‘ื” ืžืงื•ืžื™ืช = "ืฉืœื•ื ืขื•ืœื!"
ื™ื™ืฉื•ืžื•ืŸ:set_status(200)
applet:add_header("content-length", string.len(response))
applet:add_header("content-type", "text/plain")
applet:start_response()
ื™ื™ืฉื•ืžื•ืŸ:ืฉืœื— (ืชื’ื•ื‘ื”)
ืกื•ืฃ)
ืงื•ื“ ื“ื•ื’ืžื” ื–ื” ืžืฉืžืฉ ื‘ืชืฆื•ืจืช HAproxy ื›ืš:

ื“ื•ื’ืžื” ื—ื–ื™ืชื™ืช
http-request use-service lua.hello-world

core.register_init(func)
ื”ืงืฉืจ: ื’ื•ืฃ

ืจืฉื•ื ืคื•ื ืงืฆื™ื” ืฉื‘ื•ืฆืขื” ืœืื—ืจ ื ื™ืชื•ื— ื”ืชืฆื•ืจื”. ื–ื” ืฉื™ืžื•ืฉื™ ืœ
ืœื‘ื“ื•ืง ืคืจืžื˜ืจื™ื ื›ืœืฉื”ื.

ื˜ื™ืขื•ื ื™ื

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ืคื•ื ืงืฆื™ื™ืช Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื›ืžืืชื—ืœ.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

ืคื•ึผื ืงืฆึดื™ึธื”()
ื–ื” ืœื ืœื•ืงื— ืงืœื˜, ื•ืœื ืฆืคื•ื™ ืคืœื˜.

core.register_task(func)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื”ื™ืจืฉื ื•ื”ืชื—ืœ ื‘ืžืฉื™ืžื” ืขืฆืžืื™ืช. ื”ืžืฉื™ืžื” ืžืชื—ื™ืœื” ื›ืืฉืจ ื”-HAProxy ื”ืจืืฉื™
ืžืชื–ืžืŸ ืžืชื—ื™ืœ. ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื‘ืฆืข ืžืฉื™ืžื•ืช ืžืกื•ื’ ื–ื” ื›ื“ื™ ืœื‘ืฆืข ืžื•ืจื›ื‘ื•ืช
ื‘ื“ื™ืงื•ืช ื‘ืจื™ืื•ืช.

ื˜ื™ืขื•ื ื™ื

ยท func (ืคื•ื ืงืฆื™ื”) -- ื”ื™ื ืคื•ื ืงืฆื™ื™ืช Lua ืฉื ืงืจืืช ืœืขื‘ื•ื“ ื›ืžืืชื—ืœ.

ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื”ืคื•ื ืงืฆื™ื” Lua ื”ืžืฉืžืฉืช ื›ืืจื’ื•ืžื ื˜ ื”ื•ื:

ืคื•ึผื ืงืฆึดื™ึธื”()
ื–ื” ืœื ืœื•ืงื— ืงืœื˜, ื•ืœื ืฆืคื•ื™ ืคืœื˜.

core.set_nice(ื ื—ืžื“)
ื”ืงืฉืจ: ืžืฉื™ืžื”, ืคืขื•ืœื”, ื“ื•ื’ืžื”-ืฉืœื™ืคื”, ืžืžื™ืจ

ืฉื ื” ืืช ื”ื™ื•ืคื™ ืฉืœ ื”ืžืฉื™ืžื” ื”ื ื•ื›ื—ื™ืช ืื• ื”ืคื’ื™ืฉื” ื”ื ื•ื›ื—ื™ืช.

ื˜ื™ืขื•ื ื™ื

ยท ื ื—ืžื“ (ืžืกืคืจ ืฉืœื) -- ื”ืขืจืš ื”ื ื—ืžื“, ืขืœื™ื• ืœื”ื™ื•ืช ื‘ื™ืŸ -1024 ืœ-1024.

core.set_map(ืฉื ืงื•ื‘ืฅ, ืžึทืคึฐืชึตื—ึท, ืขืจืš)
ื”ืงืฉืจ: init, task, action, sample-fetch, converter

ื”ื’ื“ืจ ืืช ื”ืขืจืš ืขืจืš ื”ืงืฉื•ืจื™ื ืœืžืคืชื— ืžืคืชื— ื‘ืžืคื” ืฉืืœื™ื” ืžืชื™ื™ื—ืกื™ื ืฉื ื”ืงื•ื‘ืฅ.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื ื”ืงื•ื‘ืฅ (ืžื—ืจื•ื–ืช) -- ื”ืคื ื™ื” ืœืžืคื”

ยท ืžืคืชื— (ืžื—ืจื•ื–ืช) -- ื”ืžืคืชื— ืœื”ื’ื“ืจื” ืื• ื”ื—ืœืคื”

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ื”ืขืจืš ื”ืžืฉื•ื™ืš

core.sleep(int ืฉื ื™ื•ืช)
ื”ืงืฉืจ: ื’ื•ืฃ, ื”ืชื—ืœื”, ืžืฉื™ืžื”, ืคืขื•ืœื”

ืืœ ื”ืื ื™ core.sleep() ืคื•ื ืงืฆื™ื•ืช ืขื•ืฆืจื•ืช ืืช ื‘ื™ืฆื•ืข Lua ื‘ื™ืŸ ืฉื ื™ื•ืช ืฉืฆื•ื™ื ื•.

ื˜ื™ืขื•ื ื™ื

ยท ืฉื ื™ื•ืช (ืžืกืคืจ ืฉืœื) -- ื”ืฉื ื™ื•ืช ื”ื“ืจื•ืฉื•ืช.

core.tcp()
ื”ืงืฉืจ: ื”ืชื—ืœื”, ืžืฉื™ืžื”, ืคืขื•ืœื”

ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ ืฉืœ a ืฉืงืข ืžืขืžื“.

ื”ื—ื–ืจื™ื
A ืฉืึถืงึทืข ื‘ื›ื™ืชื” ืื•ื‘ื™ื™ืงื˜.

core.done(data)
ื”ืงืฉืจ: body, init, task, action, sample-rech, ืžืžื™ืจ

ื˜ื™ืขื•ื ื™ื

ยท ื ืชื•ื ื™ื (ื›ืœ) -- ื”ื—ื–ืจ ื›ืžื” ื ืชื•ื ื™ื ืขื‘ื•ืจ ื”ืžืชืงืฉืจ. ื–ื” ืฉื™ืžื•ืฉื™ ืขื
ื“ื•ื’ืžื™ื•ืช ื•ืžืžื™ืจื•ืช ื“ื’ื™ืžื•ืช.

ืžืคืกื™ืง ืžื™ื“ ืืช ื”ื‘ื™ืฆื•ืข ื”ื ื•ื›ื—ื™ ืฉืœ Lua ื•ื—ื•ื–ืจ ืœืžืชืงืฉืจ ืฉืื•ืœื™ ื›ืŸ
ืื—ื–ื•ืจ ืœื“ื•ื’ืžื”, ืžืžื™ืจ ืื• ืคืขื•ืœื” ื•ืžื—ื–ื™ืจ ืืช ื”ืขืจืš ืฉืฆื•ื™ืŸ (ื”ืชืขืœื
ืœืคืขื•ืœื•ืช). ื”ื•ื ืžืฉืžืฉ ื›ืืฉืจ ืชื”ืœื™ืš LUA ืžืกื™ื™ื ืืช ืขื‘ื•ื“ืชื• ื•ืจื•ืฆื” ืœืชืช
ื”ื—ื–ืจ ืืช ื”ืคืงื“ ืœ-HAProxy ืžื‘ืœื™ ืœื”ืคืขื™ืœ ืืช ื”ืงื•ื“ ืฉื ื•ืชืจ. ื ื™ืชืŸ ืœืจืื•ืช ื–ืืช ื›
"ื”ื—ื–ืจื”" ืžืจื•ื‘ืช ืจืžื•ืช.

core.yield()
ื”ืงืฉืจ: ืžืฉื™ืžื”, ืคืขื•ืœื”, ื“ื•ื’ืžื”-ืฉืœื™ืคื”, ืžืžื™ืจ

ื”ื—ื–ื™ืจื• ืืช ื”ื™ื“ ืœืœื•ื— ื”ื–ืžื ื™ื ืฉืœ HAProxy. ื”ื•ื ืžืฉืžืฉ ื‘ืขืช ืขื™ื‘ื•ื“ LUA
ื’ื•ื–ืœ ื–ืžืŸ ืขื™ื‘ื•ื“ ืจื‘.

ื‘ื›ื™ืชื” ืžื‘ื™ืื™ื()
ืžื—ืœืงื” ื–ื• ืžื›ื™ืœื” ื”ืจื‘ื” ืฉืœื™ืคื•ืช ืคื ื™ืžื™ื•ืช ืฉืœ ื“ื’ื™ืžื•ืช HAProxy. ืจืื” ืืช HAProxy
ืชื™ืขื•ื“ "configuration.txt" ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ื”. ื”ื
ื”ืคืจืงื™ื 7.3.2 ืขื“ 7.3.6.

ืื–ื”ืจื” ื—ืœืง ืžื”ืฉืœื™ืคื•ืช ืœื“ื•ื’ืžื” ืื™ื ืŸ ื–ืžื™ื ื•ืช ื‘ื”ืงืฉืจ ื›ืœืฉื”ื•. ืžื’ื‘ืœื•ืช ืืœื•
ืžืฆื•ื™ื ื™ื ื‘ืชื™ืขื•ื“ ื–ื” ื›ืืฉืจ ื”ื ืฉื™ืžื•ืฉื™ื™ื.

ืœึดืจึฐืื•ึนืช TXN.f

ืœึดืจึฐืื•ึนืช TXN.sf

ื”ืฉืœืคื•ืช ืฉื™ืžื•ืฉื™ื•ืช ืขื‘ื•ืจ:

ยท ืœืงื‘ืœ ื–ืžืŸ ืžืขืจื›ืช,

ยท ืœืงื‘ืœ ืžืฉืชื ื” ืกื‘ื™ื‘ื”,

ยท ืœืงื‘ืœ ืžืกืคืจื™ื ืืงืจืื™ื™ื,

ยท ืžืฆื‘ backend ื™ื“ื•ืข ื›ืžื• ืžืกืคืจ ื”ืžืฉืชืžืฉื™ื ื‘ืชื•ืจ ืื• ืžืกืคืจื
ื ื•ืฆืจื• ืงืฉืจื™ื,

ยท ืžื™ื“ืข ืœืงื•ื— ื›ืžื• ืžืงื•ืจ ip ืื• ื™ืขื“,

ยท ืœื”ืชืžื•ื“ื“ ืขื ืฉื•ืœื—ื ื•ืช ืžืงืœ,

ยท ืžื™ื“ืข SSL ืžื‘ื•ืกืก,

ยท ืžื™ื“ืข HTTP ื›ืžื• ื›ื•ืชืจื•ืช ืื• ืฉื™ื˜ื”.

function action(txn)
-- ืงื‘ืœ ืžืงื•ืจ IP
ืœืงื•ื— ืžืงื•ืžื™ = txn.f:src()
ืกื•ืฃ

ื‘ื›ื™ืชื” ืžืžื™ืจื™ื()
ืžื—ืœืงื” ื–ื• ืžื›ื™ืœื” ื”ืจื‘ื” ืžืžื™ืจื™ ืžื“ื’ื HAProxy ืคื ื™ืžื™ื™ื. ืจืื” ืืช HAProxy
ืชื™ืขื•ื“ "configuration.txt" ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื”ืฉื™ืžื•ืฉ ื‘ื”. ื–ื” ื”
ืคืจืง 7.3.1.

ืœึดืจึฐืื•ึนืช TXN.c

ืœึดืจึฐืื•ึนืช TXN.sc

ืžืžื™ืจื™ื ืžืกืคืงื™ื ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืžืžืœื›ืชื™ืช. ื”ื ืฉื™ืžื•ืฉื™ื™ื ืขื‘ื•ืจ:

ยท ื”ืžืจืช ืงืœื˜ ืœ-base64,

ยท ื”ื—ืœืช hash ืขืœ ืžื—ืจื•ื–ืช ืงืœื˜ (djb2, crc32, sdbm, wt6),

ยท ืขื™ืฆื•ื‘ ืชืืจื™ืš,

ยท json escape,

ยท ื—ื™ืœื•ืฅ ืฉืคื” ืžื•ืขื“ืคืช ืชื•ืš ื”ืฉื•ื•ืื” ื‘ื™ืŸ ืฉืชื™ ืจืฉื™ืžื•ืช,

ยท ืคื ื” ืœืชื•ื•ื™ื ืชื—ืชื•ื ื™ื ืื• ืขืœื™ื•ื ื™ื,

ยท ืœื”ืชืžื•ื“ื“ ืขื ืฉื•ืœื—ื ื•ืช ืžืงืœ.

ื‘ื›ื™ืชื” ืขึธืจื•ึผืฅ()
HAProxy ืžืฉืชืžืฉืช ื‘ืฉื ื™ ืžืื’ืจื™ื ืœืขื™ื‘ื•ื“ ื”ื‘ืงืฉื•ืช. ื”ืจืืฉื•ืŸ ืžืฉืžืฉ
ืขื ื ืชื•ื ื™ ื”ื‘ืงืฉื” (ืžื”ืœืงื•ื— ืœืฉืจืช) ื•ื”ืฉื ื™ ืžืฉืžืฉ ืขื‘ื•ืจ
ื ืชื•ื ื™ ื”ืชื’ื•ื‘ื” (ืžื”ืฉืจืช ืœืœืงื•ื—).

ื›ืœ ืžืื’ืจ ืžื›ื™ืœ ืฉื ื™ ืกื•ื’ื™ ื ืชื•ื ื™ื. ื”ืกื•ื’ ื”ืจืืฉื•ืŸ ื”ื•ื ื”ื ืชื•ื ื™ื ื”ื ื›ื ืกื™ื ื”ืžืžืชื™ื ื™ื
ืœืขื™ื‘ื•ื“. ื”ื—ืœืง ื”ืฉื ื™ ื”ื•ื ื”ื ืชื•ื ื™ื ื”ื™ื•ืฆืื™ื ืฉื›ื‘ืจ ืžืขื•ื‘ื“ื™ื. ื‘ึผึฐื“ึถืจึถืš ื›ึผึฐืœึทืœ,
ื”ื ืชื•ื ื™ื ื”ื ื›ื ืกื™ื ืžืขื•ื‘ื“ื™ื, ืœืื—ืจ ืฉื”ื ืžืชื•ื™ื’ื™ื ื›ื ืชื•ื ื™ื ื™ื•ืฆืื™ื, ื•ืœื‘ืกื•ืฃ ื”ื
ื ืฉืœื—. ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช ืžืกืคืงื•ืช ื›ืœื™ื ืœืชืคืขื•ืœ ื ืชื•ื ื™ื ืืœื” ื‘-a
ืžืื’ืจ.

ื”ืชืจืฉื™ื ื”ื‘ื ืžืจืื” ื”ื™ื›ืŸ ืžื™ื•ืฉืžื•ืช ืคื•ื ืงืฆื™ื™ืช ืžื—ืœืงืช ื”ืขืจื•ืฅ.

ืื–ื”ืจื”: ืœื ื ื™ืชืŸ ืœืงืจื•ื ืžื”ืชื’ื•ื‘ื” ื‘ืคืขื•ืœื” ื‘ืงืฉื”, ื•ื–ื”ื•
ืœื ื ื™ืชืŸ ืœืงืจื•ื ืขื‘ื•ืจ ืขืจื•ืฅ ื”ื‘ืงืฉื” ื‘ืคืขื•ืœืช ืชื’ื•ื‘ื”.
[ืชืžื•ื ื”]

Channel.dup(channel)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ืžืื’ืจ. ื”ื ืชื•ื ื™ื ืœื
ืœื”ืกื™ืจ ืžื”ืžืื’ืจ ื•ื ื™ืชืŸ ืœืขื‘ื“ ืื•ืชื• ืžื—ื“ืฉ ืžืื•ื—ืจ ื™ื•ืชืจ.

ืื ื”ืžืื’ืจ ืœื ื™ื›ื•ืœ ืœืงื‘ืœ ื ืชื•ื ื™ื ื ื•ืกืคื™ื, ืžื•ื—ื–ืจ ืขืจืš 'ืืคืก'.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื™ื ืื• ืืคืกื™ืช.

Channel.get(channel)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ืžืื’ืจ. ื”ื ืชื•ื ื™ื ื ืฆืจื›ื™ื
ืžื”ืžืื’ืจ.

ืื ื”ืžืื’ืจ ืœื ื™ื›ื•ืœ ืœืงื‘ืœ ื ืชื•ื ื™ื ื ื•ืกืคื™ื, ืžื•ื—ื–ืจ ืขืจืš 'ืืคืก'.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื›ืœ ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื™ื ืื• ืืคืกื™ืช.

Channel.getline(channel)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ืžืื’ืจ. ื”ื ืชื•ื ื™ื
ื ืฆืจืš. ืื ื”ื ืชื•ื ื™ื ื”ืžื•ื—ื–ืจื™ื ืื™ื ื ืžื›ื™ืœื™ื 'n' ืกื•ืคื™, ื”ื”ื ื—ื” ื”ื™ื ืฉืœื•
ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื™ื ื”ืื—ืจื•ื ื™ื ื‘ืžืื’ืจ.

ืื ื”ืžืื’ืจ ืœื ื™ื›ื•ืœ ืœืงื‘ืœ ื ืชื•ื ื™ื ื ื•ืกืคื™ื, ืžื•ื—ื–ืจ ืขืจืš 'ืืคืก'.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื”ืฉื•ืจื” ื”ื–ืžื™ื ื” ืื• ืืคืกื™ืช.

Channel.set(channel, ื—ื•ึผื˜)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ืœื™ืคื” ืืช ืชื•ื›ืŸ ื”ืžืื’ืจ ื‘ืžื—ืจื•ื–ืช. ื”ืคื•ื ืงืฆื™ื” ื—ื•ื–ืจืช
ื”ืื•ืจืš ื”ืžื•ืขืชืง, ืื—ืจืช, ื”ื•ื ืžื—ื–ื™ืจ -1.

ืขืจื›ืช ื”ื ืชื•ื ื™ื ืขื ืคื•ื ืงืฆื™ื” ื–ื• ืื™ื ื” ื ืฉืœื—ืช. ื”ื ืžื—ื›ื™ื ืœืกื•ืฃ HAProxy
ืขื™ื‘ื•ื“, ื›ืš ืฉื”ืžืื’ืจ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืœื.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ยท ืžื—ืจื•ื–ืช (ืžื—ืจื•ื–ืช) -- ื”ื ืชื•ื ื™ื ืฉื™ื™ืฉืœื—ื•.

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ื›ืžื•ืช ื”ื‘ืชื™ื ืฉื”ื•ืขืชืงื• ืื• -1.

Channel.append(channel, ื—ื•ึผื˜)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื•ืกื™ืคื” ืืช ืืจื’ื•ืžื ื˜ ื”ืžื—ืจื•ื–ืช ืœืชื•ื›ืŸ ื”ืžืื’ืจ. ื”ืคื•ื ืงืฆื™ื”
ืžื—ื–ื™ืจ ืืช ื”ืื•ืจืš ืฉื”ื•ืขืชืง, ืื—ืจืช, ื”ื•ื ืžื—ื–ื™ืจ -1.

ืขืจื›ืช ื”ื ืชื•ื ื™ื ืขื ืคื•ื ืงืฆื™ื” ื–ื• ืื™ื ื” ื ืฉืœื—ืช. ื”ื ืžื—ื›ื™ื ืœืกื•ืฃ HAProxy
ืขื™ื‘ื•ื“, ื›ืš ืฉื”ืžืื’ืจ ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืœื.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ยท ืžื—ืจื•ื–ืช (ืžื—ืจื•ื–ืช) -- ื”ื ืชื•ื ื™ื ืฉื™ื™ืฉืœื—ื•.

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ื›ืžื•ืช ื”ื‘ืชื™ื ืฉื”ื•ืขืชืงื• ืื• -1.

Channel.send(channel, ื—ื•ึผื˜)
ืคื•ื ืงืฆื™ื” ื–ื• ื“ืจืฉื” ืฉืœื™ื—ื” ืžื™ื™ื“ื™ืช ืฉืœ ื”ื ืชื•ื ื™ื. ืืœื ืื ื›ืŸ ื”ื—ื™ื‘ื•ืจ
ืกื’ื•ืจ, ื”ืžืื’ืจ ื ืฉื˜ืฃ ื‘ืื•ืคืŸ ืงื‘ื•ืข ื•ื ื™ืชืŸ ืœืฉืœื•ื— ืืช ื›ืœ ื”ืžื—ืจื•ื–ืช.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ยท ืžื—ืจื•ื–ืช (ืžื—ืจื•ื–ืช) -- ื”ื ืชื•ื ื™ื ืฉื™ื™ืฉืœื—ื•.

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ื›ืžื•ืช ื”ื‘ืชื™ื ืฉื”ื•ืขืชืงื• ืื• -1.

Channel.get_in_length(channel)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืืช ืื•ืจืš ื—ืœืง ื”ืงืœื˜ ืฉืœ ื”ืžืื’ืจ.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ื›ืžื•ืช ื”ื‘ืชื™ื ื”ื–ืžื™ื ื™ื.

Channel.get_out_length(channel)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืืช ืื•ืจืš ื—ืœืง ื”ืคืœื˜ ืฉืœ ื”ืžืื’ืจ.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ื›ืžื•ืช ื”ื‘ืชื™ื ื”ื–ืžื™ื ื™ื.

Channel.forward(channel, int)
ืคื•ื ืงืฆื™ื” ื–ื• ืžืขื‘ื™ืจื” ื‘ืชื™ื ืžื—ืœืง ื”ืงืœื˜ ืฉืœ ื”ืžืื’ืจ ืœื—ืœืง ื”ืคืœื˜.

ื˜ื™ืขื•ื ื™ื

ยท ืขืจื•ืฅ (class_channel) -- ื”ืขืจื•ืฅ ืฉืขื‘ืจ ืžื ื™ืคื•ืœืฆื™ื•ืช.

ยท int (ืžืกืคืจ ืฉืœื) -- ื›ืžื•ืช ื”ื ืชื•ื ื™ื ืฉืชื•ืขื‘ืจ.

ื‘ื›ื™ืชื” HTTP()
ืžื—ืœืงื” ื–ื• ืžื›ื™ืœื” ืืช ื›ืœ ืคื•ื ืงืฆื™ื•ืช ื”ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ HTTP.

HTTP.req_get_headers(http)
ืžื—ื–ื™ืจื” ืžืขืจืš ื”ืžื›ื™ืœ ืืช ื›ืœ ื›ื•ืชืจื•ืช ื”ื‘ืงืฉื•ืช.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ื”ื—ื–ืจื™ื
ืžืขืจืš ืฉืœ ื›ื•ืชืจื•ืช.

ืœึดืจึฐืื•ึนืช HTTP.res_get_headers()

ื–ื• ื”ืฆื•ืจื” ืฉืœ ื”ืžืขืจืš ื”ืžื•ื—ื–ืจ:

HTTP:req_get_headers()[' '][ ] = " "

hdr ืžืงื•ืžื™ = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["accept"][0] = "audio/basic q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*/*, q=0.1"

HTTP.res_get_headers(http)
ืžื—ื–ื™ืจื” ืžืขืจืš ื”ืžื›ื™ืœ ืืช ื›ืœ ื›ื•ืชืจื•ืช ื”ืชื’ื•ื‘ื”.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ื”ื—ื–ืจื™ื
ืžืขืจืš ืฉืœ ื›ื•ืชืจื•ืช.

ืœึดืจึฐืื•ึนืช HTTP.req_get_headers()

ื–ื• ื”ืฆื•ืจื” ืฉืœ ื”ืžืขืจืš ื”ืžื•ื—ื–ืจ:

HTTP:res_get_headers()[' '][ ] = " "

hdr ืžืงื•ืžื™ = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["accept"][0] = "audio/basic q=1"
hdr["accept"][1] = "audio/*, q=0.2"
hdr["accept"][2] = "*.*, q=0.1"

HTTP.req_add_header(http, ืฉื, ืขืจืš)
ืžื•ืกื™ืฃ ืฉื“ื” ื›ื•ืชืจืช HTTP ื‘ื‘ืงืฉื” ืฉืฉืžื” ืžืฆื•ื™ืŸ ื‘"ืฉื" ื•
ืฉืขืจื›ื• ืžื•ื’ื“ืจ ื‘"ืขืจืš".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.res_add_header()

HTTP.res_add_header(http, ืฉื, ืขืจืš)
ืžื•ืกื™ืฃ ืฉื“ื” ื›ื•ืชืจืช HTTP ื‘ืชื’ื•ื‘ื” ืฉืฉืžื” ืžืฆื•ื™ืŸ ื‘"ืฉื" ื•
ืฉืขืจื›ื• ืžื•ื’ื“ืจ ื‘"ืขืจืš".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.req_add_header()

HTTP.req_del_header(http, ืฉืึตื)
ืžืกื™ืจ ืืช ื›ืœ ืฉื“ื•ืช ื›ื•ืชืจื•ืช ื”-HTTP ื‘ื‘ืงืฉื” ืฉืฉืžื ืžืฆื•ื™ืŸ ื‘"ืฉื".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.res_del_header()

HTTP.res_del_header(http, ืฉืึตื)
ืžืกื™ืจ ืืช ื›ืœ ืฉื“ื•ืช ื›ื•ืชืจื•ืช ื”-HTTP ื‘ืชื’ื•ื‘ื” ืฉืฉืžื ืžืฆื•ื™ืŸ ื‘"ืฉื".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.req_del_header()

HTTP.req_set_header(http, ืฉื, ืขืจืš)
ืžืฉืชื ื” ื–ื” ืžื—ืœื™ืฃ ืืช ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ ื›ืœ ื”ื›ื•ืชืจื•ืช "ืฉื", ืจืง ื‘ืื—ืช ื”ืžื›ื™ืœื”
ื”ืขืจืš".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.res_set_header()

ืคื•ื ืงืฆื™ื” ื–ื• ืขื•ืฉื” ืืช ืื•ืชื” ืขื‘ื•ื“ื” ื›ืžื• ื”ืงื•ื“ ื”ื‘ื:

ืคื•ื ืงืฆื™ื” fcn(txn)
TXN.http:req_del_header("header")
TXN.http:req_add_header("header", "value")
ืกื•ืฃ

HTTP.res_set_header(http, ืฉื, ืขืจืš)
ืžืฉืชื ื” ื–ื” ืžื—ืœื™ืฃ ืืช ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ ื›ืœ ื”ื›ื•ืชืจื•ืช "ืฉื", ืจืง ื‘ืื—ืช ื”ืžื›ื™ืœื”
ื”ืขืจืš".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื›ื•ืชืจืช.

ืœึดืจึฐืื•ึนืช HTTP.req_rep_header()

HTTP.req_rep_header(http, ืฉื, ืจื’ืงืก, ื”ื—ืœืฃ)
ืžืชืื™ื ืœื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื‘ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ ืฉื“ื” ื”ื›ื•ืชืจืช "ืฉื" ื‘ื”ืชืื
ืœ-"regex", ื•ืžื—ืœื™ืฃ ืื•ืชื ื‘ืืจื’ื•ืžื ื˜ "replace". ืขืจืš ื”ื”ื—ืœืคื”
ื™ื›ื•ืœ ืœื”ื›ื™ืœ ื”ืคื ื™ื•ืช ืื—ื•ืจื” ื›ืžื• 1, 2, ... ืคื•ื ืงืฆื™ื” ื–ื• ืคื•ืขืœืช ืขื ื”ื‘ืงืฉื”.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท regex (ืžื—ืจื•ื–ืช) -- ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื”ื”ืชืืžื”.

ยท ืœื”ื—ืœื™ืฃ (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื”ื—ืœืคื”.

ืœึดืจึฐืื•ึนืช HTTP.res_rep_header()

HTTP.res_rep_header(http, ืฉื, ืจื’ืงืก, ื—ื•ึผื˜)
ืžืชืื™ื ืœื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื‘ื›ืœ ื”ืžื•ืคืขื™ื ืฉืœ ืฉื“ื” ื”ื›ื•ืชืจืช "ืฉื" ื‘ื”ืชืื
ืœ-"regex", ื•ืžื—ืœื™ืฃ ืื•ืชื ื‘ืืจื’ื•ืžื ื˜ "replace". ืขืจืš ื”ื”ื—ืœืคื”
ื™ื›ื•ืœ ืœื”ื›ื™ืœ ื”ืคื ื™ื•ืช ืื—ื•ืจื” ื›ืžื• 1, 2, ... ืคื•ื ืงืฆื™ื” ื–ื• ืคื•ืขืœืช ืขื ื”ื‘ืงืฉื”.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท regex (ืžื—ืจื•ื–ืช) -- ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื”ื”ืชืืžื”.

ยท ืœื”ื—ืœื™ืฃ (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื”ื—ืœืคื”.

ืœึดืจึฐืื•ึนืช HTTP.req_replace_header()

HTTP.req_replace_value(http, ืฉื, ืจื’ืงืก, ื”ื—ืœืฃ)
ืขื•ื‘ื“ ื›ืžื• "HTTP.req_replace_header()" ืืœื ืฉื”ื•ื ืชื•ืื ืืช ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื ื’ื“
ื›ืœ ืขืจืš ืžื•ืคืจื“ ื‘ืคืกื™ืง ืฉืœ ืฉื“ื” ื”ื›ื•ืชืจืช "ืฉื" ื‘ืžืงื•ื ื›ื•ืœื•
ื›ื•ืชืจืช.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท regex (ืžื—ืจื•ื–ืช) -- ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื”ื”ืชืืžื”.

ยท ืœื”ื—ืœื™ืฃ (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื”ื—ืœืคื”.

ืœึดืจึฐืื•ึนืช HTTP.req_replace_header()

ืœึดืจึฐืื•ึนืช HTTP.res_replace_value()

HTTP.res_replace_value(http, ืฉื, ืจื’ืงืก, ื”ื—ืœืฃ)
ืขื•ื‘ื“ ื›ืžื• "HTTP.res_replace_header()" ืืœื ืฉื”ื•ื ืชื•ืื ืืช ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื ื’ื“
ื›ืœ ืขืจืš ืžื•ืคืจื“ ื‘ืคืกื™ืง ืฉืœ ืฉื“ื” ื”ื›ื•ืชืจืช "ืฉื" ื‘ืžืงื•ื ื›ื•ืœื•
ื›ื•ืชืจืช.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช.

ยท regex (ืžื—ืจื•ื–ืช) -- ื”ื‘ื™ื˜ื•ื™ ื”ืจื’ื•ืœืจื™ ื”ื”ืชืืžื”.

ยท ืœื”ื—ืœื™ืฃ (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื”ื—ืœืคื”.

ืœึดืจึฐืื•ึนืช HTTP.res_replace_header()

ืœึดืจึฐืื•ึนืช HTTP.req_replace_value()

HTTP.req_set_method(http, ืฉื™ื˜ื”)
ืžืฉื›ืชื‘ ืืช ืฉื™ื˜ืช ื”ื‘ืงืฉื” ืขื ื”ืคืจืžื˜ืจ "ืฉื™ื˜ื”".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉื™ื˜ื” (ืžื—ืจื•ื–ืช) -- ื”ืฉื™ื˜ื” ื”ื—ื“ืฉื”.

HTTP.req_set_path(http, ื ืชื™ื‘)
ืžืฉื›ืชื‘ ืืช ื ืชื™ื‘ ื”ื‘ืงืฉื” ืขื ื”ืคืจืžื˜ืจ "ื ืชื™ื‘".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ื ืชื™ื‘ (ืžื—ืจื•ื–ืช) -- ื”ื“ืจืš ื”ื—ื“ืฉื”.

HTTP.req_set_query(http, ืฉืื™ืœืชื)
ืžืฉื›ืชื‘ ืืช ืžื—ืจื•ื–ืช ื”ืฉืื™ืœืชื” ืฉืœ ื”ื‘ืงืฉื” ื”ืžื•ืคื™ืขื” ืื—ืจื™ ืกื™ืžืŸ ื”ืฉืืœื” ื”ืจืืฉื•ืŸ
("?") ืขื ื”ืคืจืžื˜ืจ "ืฉืื™ืœืชื”".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉืืœื” (ืžื—ืจื•ื–ืช) -- ื”ืฉืื™ืœืชื” ื”ื—ื“ืฉื”.

HTTP.req_set_uri(http, ืื•ืจื™)
ืžืฉื›ืชื‘ ืืช URI ื”ื‘ืงืฉื” ืขื ื”ืคืจืžื˜ืจ "uri".

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืฉืœ (ืžื—ืจื•ื–ืช) -- ื”ืื•ืจื™ ื”ื—ื“ืฉ.

HTTP.res_set_status(http, ืกื˜ึธื˜ื•ึผืก)
ืžืฉื›ืชื‘ ืืช ืงื•ื“ ืžืฆื‘ ื”ืชื’ื•ื‘ื” ืขื ื”ืคืจืžื˜ืจ "ืงื•ื“". ืฉื™ืžื• ืœื‘ ืฉื”ืกื™ื‘ื”
ืžื•ืชืื ืื•ื˜ื•ืžื˜ื™ืช ืœืงื•ื“ ื”ื—ื“ืฉ.

ื˜ื™ืขื•ื ื™ื

ยท http (class_http) -- ืื•ื‘ื™ื™ืงื˜ ื”-http ื”ืงืฉื•ืจ.

ยท ืžืฆื‘ (ืžืกืคืจ ืฉืœื) -- ืงื•ื“ ืกื˜ื˜ื•ืก ื”ืชื’ื•ื‘ื” ื”ื—ื“ืฉ.

ื‘ื›ื™ืชื” TXN()
ื”ืžื—ืœืงื” txn ืžื›ื™ืœื” ืืช ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ื‘ื™ื—ืก ืœืขืกืงืช http ืื• tcp
(ืฉื™ื ืœื‘ ืฉื–ืจื tcp ื–ื”ื” ืœืขืกืงืช tcp, ืื‘ืœ ืขืกืงืช HTTP
ืื™ื ื• ื–ื”ื” ืœื–ืจื tcp).

ื”ืฉื™ืžื•ืฉ ื‘ืžื—ืœืงื” ื–ื• ืžืืคืฉืจ ืœืื—ื–ืจ ื ืชื•ื ื™ื ืžื”ื‘ืงืฉื•ืช, ืœืฉื ื•ืช ืื•ืชื ื•
ืœื”ืขื‘ื™ืจ ืื•ืชื•.

ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืฉืžืกืคืงื•ืช ืžื—ืœืงื” ื–ื• ื–ืžื™ื ื•ืช ื‘ื”ืงืฉืจ
ื“ื’ื™ืžื•ืช-ืฉืœื™ืคื•ืช ื• ืคืขื•ืœื•ืช.

TXN.c

ื”ื—ื–ืจื™ื
An ืžืžื™ืจื™ื ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters.

TXN.sc

ื”ื—ื–ืจื™ื
An ืžืžื™ืจื™ื ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters. ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื–ื”
ืžื—ื–ื™ืจ ืชืžื™ื“ ืžื—ืจื•ื–ืช.

TXN.f

ื”ื—ื–ืจื™ื
An ืžื‘ื™ื ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches.

TXN.sf

ื”ื—ื–ืจื™ื
An ืžื‘ื™ื ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches. ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื–ื”
ืžื—ื–ื™ืจ ืชืžื™ื“ ืžื—ืจื•ื–ืช.

TXN.req

ื”ื—ื–ืจื™ื
An ืขืจื•ืฅ ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงืช ืขืจื•ืฅ ืขื‘ื•ืจ ืžืื’ืจ ื”ื‘ืงืฉื•ืช.

TXN.res

ื”ื—ื–ืจื™ื
An ืขืจื•ืฅ ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงืช ืขืจื•ืฅ ืขื‘ื•ืจ ืžืื’ืจ ื”ืชื’ื•ื‘ื”.

TXN.http

ื”ื—ื–ืจื™ื
An HTTP ื‘ื›ื™ืชื”.

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžืกื•ื’ HTTP. ื–ื” ื–ืžื™ืŸ ืจืง ืื ื™ืฉ ืœ-proxy
"ืžืฆื‘ http" ืžื•ืคืขืœ.

TXN.log(TXN, loglevel, msg)
ืคื•ื ืงืฆื™ื” ื–ื• ืฉื•ืœื—ืช ื™ื•ืžืŸ. ื”ื™ื•ืžืŸ ื ืฉืœื—, ื‘ื”ืชืื ืœ-HAProxy
ืงื•ื‘ืฅ ืชืฆื•ืจื”, ื‘ืฉืจืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ syslog ืื ื”ื•ื ืžื•ื’ื“ืจ ื•ื‘-
stderr ืื ื–ื” ืžื•ืชืจ.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ืจืžืช ื™ื•ืžืŸ (ืžืกืคืจ ืฉืœื) -- ื”ืื ืจืžืช ื”ื™ื•ืžืŸ ืžืฉื•ื™ื›ืช ืœื”ื•ื“ืขื”. ื–ื”
ืžืกืคืจ ื‘ื™ืŸ 0 ืœ-7.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช core.emerg, core.alert, core.crit, core.err, core.warning, core.notice,
core.info, core.debug (ื”ื’ื“ืจื•ืช ื‘ืจืžืช ื™ื•ืžืŸ)

ืœึดืจึฐืื•ึนืช TXN.deflog

ืœึดืจึฐืื•ึนืช TXN.Debug

ืœึดืจึฐืื•ึนืช TXN.Info

ืœึดืจึฐืื•ึนืช TXN. ืื–ื”ืจื”

ืœึดืจึฐืื•ึนืช TXN.Alert

TXN.deflog(TXN, msg)
ืฉื•ืœื— ืฉื•ืจืช ื™ื•ืžืŸ ืขื ืจืžืช ื”ื™ื•ืžืŸ ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืขื‘ื•ืจ ื”-proxy ื”ืžืฉื•ื™ืš ืœ-
- ืขืกืงื”.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช TXN.log

TXN.Debug(txn, msg)

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช TXN.log

ืขื•ืฉื” ืืช ืื•ืชื” ืขื‘ื•ื“ื” ืžืืฉืจ:

function Debug(txn, msg)
TXN.log(txn, core.debug, msg)
ืกื•ืฃ

TXN.Info(txn, msg)

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช TXN.log

function Debug(txn, msg)
TXN.log(txn, core.info, msg)
ืกื•ืฃ

TXN.Warning(txn, msg)

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช TXN.log

function Debug(txn, msg)
TXN.log(txn, core.warning, msg)
ืกื•ืฃ

TXN.Alert(txn, msg)

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท msg (ืžื—ืจื•ื–ืช) -- ืชื•ื›ืŸ ื”ื™ื•ืžืŸ.

ืœึดืจึฐืื•ึนืช TXN.log

function Debug(txn, msg)
TXN.log(txn, core.alert, msg)
ืกื•ืฃ

TXN.get_priv(txn)
ื”ื—ื–ืจ ื ืชื•ื ื™ Lua ื”ืžืื•ื—ืกื ื™ื ื‘ืขืกืงื” ื”ื ื•ื›ื—ื™ืช (ืขื ื” TXN.set_priv()โ€Ž)
ืคื•ึผื ืงืฆึดื™ึธื”. ืื ืœื ืžืื•ื—ืกื ื™ื ื ืชื•ื ื™ื, ื”ื•ื ืžื—ื–ื™ืจ ืขืจืš ืืคืก.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ื”ื—ื–ืจื™ื
ื”ื ืชื•ื ื™ื ื”ืื˜ื•ืžื™ื ืฉื ืฉืžืจื• ื‘ืขื‘ืจ, ืื• ืืคืกื™ื™ื ืื ืฉื•ื ื“ื‘ืจ ืœื ื–ืžื™ืŸ.

TXN.set_priv(txn, ื ืชื•ื ื™ื)
ืื—ืกืŸ ื ืชื•ื ื™ื ื›ืœืฉื”ื ื‘ืขืกืงืช HAProxy ื”ื ื•ื›ื—ื™ืช. ืคืขื•ืœื” ื–ื• ืžื—ืœื™ืคื” ืืช ื”ื™ืฉืŸ
ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ื ืชื•ื ื™ื (ืื˜ื•ื) - ื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืขืกืงื”.

TXN.set_var(TXN, ื™ืฉ, ืขืจืš)
ืžืžื™ืจ ืกื•ื’ Lua ื‘ืกื•ื’ HAProxy ื•ืžืื—ืกืŸ ืื•ืชื• ื‘ืžืฉืชื ื” .

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ื”ื™ื” (ืžื—ืจื•ื–ืช) -- ืฉื ื”ืžืฉืชื ื” ื‘ื”ืชืื ืœืžืฉืชื ื” HAProxy
ืชื—ื‘ื™ืจ.

ยท ืขืจืš (ืื˜ื•ื) -- ื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืžืฉืชื ื”.

TXN.get_var(TXN, var)
ืžื—ื–ื™ืจื” ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื ื‘ืžืžื™ืจ ื”ืžืฉืชื ื” ื‘ืกื•ื’ Lua.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ื”ื™ื” (ืžื—ืจื•ื–ืช) -- ืฉื ื”ืžืฉืชื ื” ื‘ื”ืชืื ืœืžืฉืชื ื” HAProxy
ืชื—ื‘ื™ืจ.

TXN.get_headers(txn)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžืขืจืš ืฉืœ ื›ื•ืชืจื•ืช.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ื”ื—ื–ืจื™ื
ืžืขืจืš ืฉืœ ื›ื•ืชืจื•ืช.

TXN.done(txn)
ืคื•ื ืงืฆื™ื” ื–ื• ืžืคืกื™ืงื” ืืช ื”ืขื™ื‘ื•ื“ ืฉืœ ื”ืขืกืงื” ื•ื”ื”ืคืขืœื” ื”ืงืฉื•ืจื”.
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ื›ืืฉืจ ืžื–ื•ื”ื” ืฉื’ื™ืื” ืงืจื™ื˜ื™ืช ืื• ื›ื“ื™ ืœื”ืคืกื™ืง ืืช ื”ืขื™ื‘ื•ื“ ืœืื—ืจ ืžื›ืŸ
ื—ืœืง ืžื”ื ืชื•ื ื™ื ื”ื•ื—ื–ืจื• ืœืœืงื•ื— (ืœืžืฉืœ: ื”ืคื ื™ื” ืžื—ื“ืฉ).

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

TXN.set_loglevel(txn, ืจืžืช ื™ื•ืžืŸ)
ืžืฉืžืฉ ืœืฉื™ื ื•ื™ ืจืžืช ื”ื™ื•ืžืŸ ืฉืœ ื”ื‘ืงืฉื” ื”ื ื•ื›ื—ื™ืช. ื”-"loglevel" ื—ื™ื™ื‘ ืœื”ื™ื•ืช an
ืžืกืคืจ ืฉืœื ื‘ื™ืŸ 0 ืœ-7.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ืจืžืช ื™ื•ืžืŸ (ืžืกืคืจ ืฉืœื) -- ืจืžืช ื”ื™ื•ืžืŸ ื”ื ื“ืจืฉืช. ืžืฉืชื ื” ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืื—ื“ ืžื”ื

ืœึดืจึฐืื•ึนืช ื”ืœื™ื‘ื”.

TXN.set_tos(txn, ื˜ื•ืก)
ืžืฉืžืฉ ืœื”ื’ื“ืจืช ืขืจืš ื”ืฉื“ื” TOS ืื• DSCP ืฉืœ ืžื ื•ืช ืฉื ืฉืœื—ื•ืช ืœืœืงื•ื— ืœ-
ืขืจืš ืฉื”ื•ืขื‘ืจ ื‘-"tos" ื‘ืคืœื˜ืคื•ืจืžื•ืช ืฉืชื•ืžื›ื•ืช ื‘ื›ืš.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท tos (ืžืกืคืจ ืฉืœื) -- DSCP ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื”ื—ื“ืฉื” ืฉืœ TOS.

TXN.set_mark(txn, ืกื™ืžืŸ)
ืžืฉืžืฉ ืœื”ื’ื“ืจืช ื”-Netfilter MARK ืขืœ ื›ืœ ื”ื—ื‘ื™ืœื•ืช ืฉื ืฉืœื—ื•ืช ืœืœืงื•ื— ืœืขืจืš
ืขื‘ืจ ื‘"ืกื™ืžืŸ" ื‘ืคืœื˜ืคื•ืจืžื•ืช ื”ืชื•ืžื›ื•ืช ื‘ื›ืš.

ื˜ื™ืขื•ื ื™ื

ยท txn (class_txn) -- ืื•ื‘ื™ื™ืงื˜ ื”ืžื—ืœืงื” txn ื”ืžื›ื™ืœ ืืช ื”ื ืชื•ื ื™ื.

ยท ืกื™ืžืŸ (ืžืกืคืจ ืฉืœื) -- ืขืจืš ื”ืกื™ืžืŸ.

ื‘ื›ื™ืชื” ืฉืึถืงึทืข()
ืžื—ืœืงื” ื–ื• ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืชื•ืืžืช ืœืžื—ืœืงื” Lua Socket. ืจืง ื”'ืœืงื•ื—'
ืคื•ื ืงืฆื™ื•ืช ื–ืžื™ื ื•ืช. ืจืื” ืืช ื”ืชื™ืขื•ื“ ืฉืœ Lua Socket:

http://w3.impa.br/~diego/software/luasocket/tcp.html

Socket.close(socket)
ืกื•ื’ืจ ืื•ื‘ื™ื™ืงื˜ TCP. ื”ืฉืงืข ื”ืคื ื™ืžื™ ื”ืžืฉืžืฉ ืืช ื”ืื•ื‘ื™ื™ืงื˜ ืกื’ื•ืจ ื•ื”ืžืงื•ืžื™
ื”ื›ืชื•ื‘ืช ืฉืืœื™ื” ื ืงืฉืจ ื”ืื•ื‘ื™ื™ืงื˜ ื–ืžื™ื ื” ืœื™ื™ืฉื•ืžื™ื ืื—ืจื™ื. ืœื
ืคืขื•ืœื•ืช ื ื•ืกืคื•ืช (ืœืžืขื˜ ืงืจื™ืื•ืช ื ื•ืกืคื•ืช ืœืฉื™ื˜ืช ื”ืกื’ื™ืจื”) ืžื•ืชืจื•ืช ื‘-a
ืฉืงืข ืกื’ื•ืจ.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ื”ืขืจื”: ื—ืฉื•ื‘ ืœืกื’ื•ืจ ืืช ื›ืœ ื”ืฉืงืขื™ื ื”ืžืฉื•ืžืฉื™ื ื‘ืจื’ืข ืฉืื™ืŸ ื‘ื”ื ืฆื•ืจืš, ืฉื›ืŸ, ื‘
ืžืขืจื›ื•ืช ืจื‘ื•ืช, ื›ืœ ืฉืงืข ืžืฉืชืžืฉ ื‘ืžืชืืจ ืงื‘ืฆื™ื, ืฉื”ืŸ ืžืขืจื›ืช ืžื•ื’ื‘ืœืช
ืึถืžึฐืฆึธืขึดื™. ื—ืคืฆื™ื ืฉื ืืกืคื• ื‘ืืฉืคื” ื ืกื’ืจื™ื ืื•ื˜ื•ืžื˜ื™ืช ืœืคื ื™ ื”ื”ืฉืžื“ื”,
ืืฃ.

Socket.connect(socket, ื›ืชื•ื‘ืช[, ื ืžืœ])
ื ื™ืกื™ื•ื ื•ืช ืœื—ื‘ืจ ืื•ื‘ื™ื™ืงื˜ ืฉืงืข ืœืžืืจื— ืžืจื•ื—ืง.

ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื”, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืคืก ื•ืื—ืจื™ื” ืžื—ืจื•ื–ืช ื”ืžืชืืจืช โ€‹โ€‹ืืช ื”ืฉื’ื™ืื”.
ื‘ืžืงืจื” ืฉืœ ื”ืฆืœื—ื”, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” 1.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ยท ื›ืชื•ื‘ืช (ืžื—ืจื•ื–ืช) -- ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืชื•ื‘ืช IP ืื• ืฉื ืžืืจื—. ืจืื” ืœื”ืœืŸ ืขื‘ื•ืจ
ืขื•ื“ ืžื™ื“ืข.

ยท ื ืžืœ (ืžืกืคืจ ืฉืœื) -- ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืกืคืจ ืฉืœื ื‘ื˜ื•ื•ื— [1..64K].

ื”ื—ื–ืจื™ื
1 ืื• ืืคืก.

ืกื™ื•ืžืช ืฉื“ื” ื›ืชื•ื‘ืช ืžืืคืฉืจืช ืœื”ืฉืชืžืฉ ื‘ืคื•ื ืงืฆื™ื” connect() ื›ื“ื™ ืœื”ืชื—ื‘ืจ ืืœื™ื”
ื–ืจื ืื—ืจ ืžืืฉืจ TCP. ื”ืชื—ื‘ื™ืจ ื”ืžื›ื™ืœ ื›ืชื•ื‘ืช simpleipv4 ืื• ipv6 ื”ื•ื
ื‘ืขืฆื ื”ืคื•ืจืžื˜ ื”ืฆืคื•ื™. ืคื•ืจืžื˜ ื–ื” ื“ื•ืจืฉ ืืช ื”ื™ืฆื™ืื”.

ืคื•ืจืžื˜ ืื—ืจ ื”ืžืงื•ื‘ืœ ื”ื•ื ื ืชื™ื‘ ืฉืงืข ื›ืžื• "/socket/path", ื”ื•ื ืžืืคืฉืจ ืœื”ืชื—ื‘ืจ
ืœืฉืงืข. ืžืจื—ื‘ื™ ืฉืžื•ืช ืžื•ืคืฉื˜ื™ื ื ืชืžื›ื™ื ืขื ื”ืงื™ื“ื•ืžืช "abns@", ื•ืœื‘ืกื•ืฃ
ื ื™ืชืŸ ืœื”ืขื‘ื™ืจ filedescriotr ืขื ื”ืงื™ื“ื•ืžืช "fd@". ื”ืงื™ื“ื•ืžืช "ipv4@", "ipv6@"
ื•ื’ื "unix@" ื ืชืžื›ื™ื. ื ื™ืชืŸ ืœื”ืขื‘ื™ืจ ืืช ื”ื™ืฆื™ืื” ืœืชื•ืš ื”ืžื—ืจื•ื–ืช. ื”ืชื—ื‘ื™ืจ
"127.0.0.1:1234" ืชืงืฃ. ื‘ืžืงืจื” ื–ื”, ื”ืคืจืžื˜ืจ ื ืžืœ ืžืชืขืœืžื™ื.

Socket.connect_ssl(socket, ื›ืชื•ื‘ืช, ื™ืฆื™ืื”)
ืื•ืชื” ื”ืชื ื”ื’ื•ืช ื›ืžื• ื”ืคื•ื ืงืฆื™ื” socket:connect, ืืš ืžืฉืชืžืฉืช ื‘-SSL.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ื”ื—ื–ืจื™ื
1 ืื• ืืคืก.

Socket.getpeername(socket)
ืžื—ื–ื™ืจ ืžื™ื“ืข ืขืœ ื”ืฆื“ ื”ืžืจื•ื—ืง ืฉืœ ืื•ื‘ื™ื™ืงื˜ ืœืงื•ื— ืžื—ื•ื‘ืจ.

ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ืขื ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืขืžื™ืช, ื•ืื—ืจื™ื” ืืช ืžืกืคืจ ื”ื™ืฆื™ืื”
ืขืžื™ืช ืžืฉืชืžืฉ ืขื‘ื•ืจ ื”ื—ื™ื‘ื•ืจ. ื‘ืžืงืจื” ืฉืœ ื˜ืขื•ืช, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืคืก.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ืžื™ื“ืข ื”ืฉืจืช.

Socket.getsockname(socket)
ืžื—ื–ื™ืจื” ืืช ืคืจื˜ื™ ื”ื›ืชื•ื‘ืช ื”ืžืงื•ืžื™ืช ื”ืžืฉื•ื™ื›ื™ื ืœืื•ื‘ื™ื™ืงื˜.

ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ืขื ื›ืชื•ื‘ืช IP ืžืงื•ืžื™ืช ื•ืžืกืคืจ ืขื ื”ื™ืฆื™ืื”. ื‘
ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื”, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืคืก.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ืคืจื˜ื™ ื”ืœืงื•ื—.

Socket.receive(socket[, ืชื‘ื ื™ืช[, ืงื™ื“ื•ืžืช]])
ืงื•ืจื ื ืชื•ื ื™ื ืžืื•ื‘ื™ื™ืงื˜ ืœืงื•ื—, ื‘ื”ืชืื ืœื“ืคื•ืก ื”ืงืจื™ืื” ืฉืฆื•ื™ืŸ. ื“ืคื•ืกื™ื
ืขืงื•ื‘ ืื—ืจ ืคื•ืจืžื˜ ื”-I/O ืฉืœ ืงื•ื‘ืฅ Lua, ื•ื”ื”ื‘ื“ืœ ื‘ื‘ื™ืฆื•ืขื™ื ื‘ื™ืŸ ื›ื•ืœื
ื“ืคื•ืกื™ื ื–ื ื™ื—ื™ื.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ยท ื“ืคื•ืก (ืžื—ืจื•ื–ืช|ืžืกืคืจ ืฉืœื) - ืชืืจ ืžื” ื ื“ืจืฉ (ืจืื” ืœื”ืœืŸ).

ยท ืงื™ื“ื•ืžืช (ืžื—ืจื•ื–ืช) -- ืžื—ืจื•ื–ืช ืฉืชื”ื™ื” ืงื™ื“ื•ืžืช ื”ื ืชื•ื ื™ื ื”ืžื•ื—ื–ืจื™ื.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื”ื ืชื•ื ื™ื ื”ื ื“ืจืฉื™ื ืื• ืืคืกื™ืช.

ื”ื“ืคื•ืก ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ืื—ื“ ืžื”ืืคืฉืจื•ื™ื•ืช ื”ื‘ืื•ืช:

ยท

`*ื`: ืงื•ืจื ื”ื—ืœ ืž- ืžื” ื”ื™ื ืฉืงืข ืขื“ ืžื” ื”ื™ื ื”ืงืฉืจ is ืกื’ื•ืจ. ืœื
ืžื‘ื•ืฆืข ืชืจื’ื•ื ืกื•ืฃ ืฉื•ืจื”;

ยท

`*ืœ`: ืงื•ืจื a ืงื• of ื˜ึถืงืกื˜ ื”ื—ืœ ืž- ืžื” ื”ื™ื ืฉืงืข ืืœ ื”ืื ื™ ืงื• is ื”ืกืชื™ื™ื by a
ืชื• LF (ASCII 10), ืื•ืคืฆื™ื•ื ืœื™ ืœืคื ื™ื• ืชื• CR (ASCII 13).
ื”ืชื•ื•ื™ื CR ื•-LF ืื™ื ื ื›ืœื•ืœื™ื ื‘ืฉื•ืจื” ื”ืžื•ื—ื–ืจืช. ืœืžืขืฉื”,
ื”ืชื‘ื ื™ืช ืžืชืขืœืžืช ืžื›ืœ ืชื•ื•ื™ ื”-CR. ื–ื”ื• ื“ืคื•ืก ื‘ืจื™ืจืช ื”ืžื—ื“ืœ.

ยท

ืžืกืคืจ: ื’ื•ืจืžื™ื ืžื” ื”ื™ื ืฉื™ื˜ื” ืœ ืœืงืจื•ื a ืžืคื•ืจื˜ ืžืกืคืจ of ื‘ืชื™ื ื”ื—ืœ ืž- ืžื” ื”ื™ื
ืฉืึถืงึทืข. ืงื™ื“ื•ืžืช ื”ื™ื ืžื—ืจื•ื–ืช ืื•ืคืฆื™ื•ื ืœื™ืช ืฉื™ืฉ ืœืฉืจืฉืจ ืœื”ืชื—ืœื”
ืฉืœ ื›ืœ ื”ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ืœืคื ื™ ื”ื”ื—ื–ืจื”.

ยท ืจื™ืง: ืื ื”ืชื‘ื ื™ืช ื ืฉืืจืช ืจื™ืงื”, ืืคืฉืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื *l.

ืื ืžืฆืœื™ื—, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืช ื”ืชื‘ื ื™ืช ืฉื”ืชืงื‘ืœื”. ื‘ืžืงืจื” ืฉืœ ื˜ืขื•ืช, ื”
ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืคืก ื•ืื—ืจื™ื” ื”ื•ื“ืขืช ืฉื’ื™ืื” ืฉื™ื›ื•ืœื” ืœื”ื™ื•ืช ื”ืžื—ืจื•ื–ืช 'ืกื’ื•ืจื”' ืคื ื™ืžื”
ื‘ืžืงืจื” ืฉื”ื—ื™ื‘ื•ืจ ื ืกื’ืจ ืœืคื ื™ ื”ืฉืœืžืช ื”ืฉื™ื“ื•ืจ ืื• ื”ืžื—ืจื•ื–ืช
'ืคืกืง ื–ืžืŸ' ืœืžืงืจื” ืฉื”ื™ื” ืคืกืง ื–ืžืŸ ื‘ืžื”ืœืš ื”ืคืขื•ืœื”. ื›ืžื• ื›ืŸ, ืœืื—ืจ ื”ืฉื’ื™ืื”
ื”ื•ื“ืขื”, ื”ืคื•ื ืงืฆื™ื” ืžื—ื–ื™ืจื” ืืช ื”ืชื•ืฆืื” ื”ื—ืœืงื™ืช ืฉืœ ื”ืฉื™ื“ื•ืจ.

ื”ืขืจื” ื—ืฉื•ื‘ื”: ืคื•ื ืงืฆื™ื” ื–ื• ืฉื•ื ืชื” ื‘ืื•ืคืŸ ื—ืžื•ืจ. ื–ื” ื ื”ื’ ืœืชืžื•ืš ื‘ืžืกืคืจ
ื“ืคื•ืกื™ื (ืื‘ืœ ืžืขื•ืœื ืœื ืจืื™ืชื™ ืชื›ื•ื ื” ื–ื• ื‘ืฉื™ืžื•ืฉ) ื•ืขื›ืฉื™ื• ื–ื” ื›ื‘ืจ ืœื.
ืชื•ืฆืื•ืช ื—ืœืงื™ื•ืช ื”ื™ื• ืžื•ื—ื–ืจื•ืช ื‘ืื•ืชื• ืื•ืคืŸ ื›ืžื• ืชื•ืฆืื•ืช ืžื•ืฆืœื—ื•ืช. ื–ึถื”
ื”ืชื›ื•ื ื” ื”ืื—ืจื•ื ื” ื”ืคืจื” ืืช ื”ืจืขื™ื•ืŸ ืฉื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ืฆืจื™ื›ื•ืช ืœื”ื—ื–ื™ืจ ืืคืก ื‘ืฉื’ื™ืื”. ืœื›ืŸ
ื’ื ื–ื” ื”ืฉืชื ื”.

Socket.send(socket, ื ืชื•ื ื™ื[, ื”ึทืชื—ึธืœึธื”[, ืกื•ึนืฃ]])
ืฉื•ืœื— ื ืชื•ื ื™ื ื“ืจืš ืื•ื‘ื™ื™ืงื˜ ื”ืœืงื•ื—.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ยท ื ืชื•ื ื™ื (ืžื—ืจื•ื–ืช) -- ื”ื ืชื•ื ื™ื ืฉื™ื™ืฉืœื—ื•.

ยท ื”ืชื—ืœื” (ืžืกืคืจ ืฉืœื) -- ืžื™ืงื•ื ื”ื”ืชื—ืœื” ื‘ืžืื’ืจ ื”ื ืชื•ื ื™ื ืืฉืจ ื™ื”ื™ื”
ืœื”ื™ืฉืœื—.

ยท ืกื•ืฃ (ืžืกืคืจ ืฉืœื) -- ืžื™ืงื•ื ื”ืงืฆื” ื‘ืžืื’ืจ ื”ื ืชื•ื ื™ื ืฉื™ื”ื™ื”
ื ืฉืœื—.

ื”ื—ื–ืจื™ื
ืจืื” ืœืžื˜ื”.

ื ืชื•ื ื™ื ื”ื ื”ืžื—ืจื•ื–ืช ืฉื™ืฉ ืœืฉืœื•ื—. ื”ืืจื’ื•ืžื ื˜ื™ื ื”ืื•ืคืฆื™ื•ื ืœื™ื™ื i ื•-j ืขื•ื‘ื“ื™ื ื‘ื“ื™ื•ืง ื›ืžื• ื”-
ืคื•ื ืงืฆื™ื™ืช string.sub Lua ืกื˜ื ื“ืจื˜ื™ืช ื›ื“ื™ ืœืืคืฉืจ ืืช ื”ื‘ื—ื™ืจื” ืฉืœ ืžื—ืจื•ื–ืช ืžืฉื ื” ืœื”ื™ืฉืœื—.

ืื ื”ื™ื ืžืฆืœื™ื—ื”, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืช ื”ืื™ื ื“ืงืก ืฉืœ ื”ื‘ื™ืช ื”ืื—ืจื•ืŸ ื‘ืชื•ืš [ื”ืชื—ืœื”, ืกื•ืฃ]
ืฉื ืฉืœื—. ืฉื™ืžื• ืœื‘ ืฉืื ื”ื”ืชื—ืœื” ื”ื™ื 1 ืื• ื ืขื“ืจืช, ื–ื”ื• ืœืžืขืฉื” ื”-
ื”ืžืกืคืจ ื”ื›ื•ืœืœ ืฉืœ ื‘ืชื™ื ืฉื ืฉืœื—ื•. ื‘ืžืงืจื” ืฉืœ ืฉื’ื™ืื”, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืืคืก, ื•ืื—ืจื™ื”
ื”ื•ื“ืขืช ืฉื’ื™ืื”, ื•ืื—ืจื™ื” ื”ืื™ื ื“ืงืก ืฉืœ ื”ื‘ื™ื˜ ื”ืื—ืจื•ืŸ ื‘ืชื•ืš [ื”ืชื—ืœื”, ืกื™ื•ื] ื–ื”
ื ืฉืœื—. ืื•ืœื™ ืชืจืฆื” ืœื ืกื•ืช ืฉื•ื‘ ืžื”ื‘ื™ื™ื˜ ืฉืœืื—ืจ ืžื›ืŸ. ื”ื˜ืขื•ืช
ื ื™ืชืŸ 'ืœืกื’ื•ืจ' ื”ื•ื“ืขื” ื‘ืžืงืจื” ืฉื”ื—ื™ื‘ื•ืจ ื ืกื’ืจ ืœืคื ื™ ื”ืฉื™ื“ื•ืจ
ื”ื•ืฉืœื ืื• ื”ืžื—ืจื•ื–ืช 'ืคืกืง ื–ืžืŸ' ืœืžืงืจื” ืฉื”ื™ื” ืคืกืง ื–ืžืŸ ื‘ืžื”ืœืš
ืคืขื•ืœื”.

ื”ืขืจื”: ื”ืคืœื˜ ืื™ื ื• ืžืื•ื—ืกืŸ. ืขื‘ื•ืจ ืžื—ืจื•ื–ื•ืช ืงื˜ื ื•ืช, ืชืžื™ื“ ืขื“ื™ืฃ ืœืฉืจืฉื•ืจ
ืื•ืชื ื‘-Lua (ืขื ื”ืžืคืขื™ืœ '..') ื•ืฉืœื— ืืช ื”ืชื•ืฆืื” ื‘ืฉื™ื—ื” ืื—ืช ื‘ืžืงื•ื
ืงื•ืจื ืœืฉื™ื˜ื” ืžืกืคืจ ืคืขืžื™ื.

Socket.setoption(socket, ืื•ึนืคึผึฐืฆึดื™ึธื”[, ืขืจืš])
ืจืง ืžื™ื•ืฉื ืขื‘ื•ืจ ืชืื™ืžื•ืช, cal ื–ื” ืœื ืขื•ืฉื” ื›ืœื•ื.

Socket.settimeout(socket, ืขืจืš[, ืžืฆื‘])
ืžืฉื ื” ืืช ืขืจื›ื™ ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ืขื‘ื•ืจ ื”ืื•ื‘ื™ื™ืงื˜. ื›ืœ ืคืขื•ืœื•ืช ื”ืงืœื˜/ืคืœื˜ ื—ื•ืกืžื•ืช. ื–ึถื”
ื”ื•ื ืฉื›ืœ ืงืจื™ืื” ืœืฉื™ื˜ื•ืช ืฉืœื™ื—ื”, ืงื‘ืœื” ื•ืงื‘ืœื” ืชื™ื—ืกื ืœืœื ื”ื’ื‘ืœืช ื–ืžืŸ,
ืขื“ ืœืกื™ื•ื ื”ืคืขื•ืœื”. ืฉื™ื˜ืช settimeout ืžื’ื“ื™ืจื” ืžื’ื‘ืœื” ืขืœ ื”ื›ืžื•ืช
ืฉืœ ื–ืžืŸ ืฉืฉื™ื˜ื•ืช ื”ืงืœื˜/ืคืœื˜ ื™ื›ื•ืœื•ืช ืœื—ืกื•ื. ื›ืืฉืจ ื—ืœืฃ ื–ืžืŸ ืงืฆื•ื‘, ื”ืžื•ืฉืคืข
ืฉื™ื˜ื•ืช ืžื•ื•ืชืจื•ืช ื•ื ื›ืฉืœื•ืช ืขื ืงื•ื“ ืฉื’ื™ืื”.

ืžืฉืš ื”ื–ืžืŸ ืœื”ืžืชื ื” ืžืฆื•ื™ืŸ ื›ืคืจืžื˜ืจ ื”ืขืจืš, ื‘ืฉื ื™ื•ืช.

ืžืฆื‘ื™ ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ืžื™ื•ืฉืžื™ื ื‘ื•ื˜, ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ื”ื™ื—ื™ื“ ืฉื ื™ืชืŸ ืœื”ื’ื“ืจื” ื”ื•ื ื—ื•ืกืจ ื”ืคืขื™ืœื•ืช
ื–ืžืŸ ื”ืžืชื ื” ืœื”ืฉืœืžืช ื”ืฉืœื™ื—ื” ืฉืœ ื”ืžืื’ืจ ื”ืคื ื™ืžื™ ืื• ื”ืžืชื ื” ืœืงื‘ืœืช ื ืชื•ื ื™ื.

ื˜ื™ืขื•ื ื™ื

ยท ืฉืงืข (class_socket) - ื”ืื ื”-Socket ื”ืžื˜ื•ืคืœ.

ยท ืขืจืš (ืžืกืคืจ ืฉืœื) -- ืขืจืš ื”ื–ืžืŸ ื”ืงืฆื•ื‘.

ื‘ื›ื™ืชื” ืžึทืคึผึธื”()
ืžื—ืœืงื” ื–ื• ืžืืคืฉืจืช ืœื‘ืฆืข ื—ื™ืคื•ืฉ ืžืกื•ื™ื ื‘ืžืคื•ืช HAProxy. ื”ืžืคื•ืช ื”ืžื•ืฆื”ืจื•ืช ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช
ืฉื•ื ื” ื‘ืžื”ืœืš ื–ืžืŸ ื”ืจื™ืฆื” ื“ืจืš ืฉืงืข ื”ื ื™ื”ื•ืœ HAProxy.

ื‘ืจื™ืจืช ืžื—ื“ืœ = "ืืจื”"ื‘

- ืฆื•ืจ ื•ื˜ืขืŸ ืžืคื”
geo = Map.new("geo.map", Map.ip);

-- ืฆื•ืจ ืื—ื–ื•ืจ ื—ื“ืฉ ืฉืžื—ื–ื™ืจ ืืช ืžื“ื™ื ืช ื”ืžืฉืชืžืฉ
core.register_fetches("country", function(txn)
src ืžืงื•ืžื™;
ืœื•ืง ืžืงื•ืžื™;

src = txn.f:fhdr("x-forwarded-for");
if (src == nil) ืื–
src = txn.f:src()
if (src == nil) ืื–
ื”ื—ื–ืจ ื‘ืจื™ืจืช ืžื—ื“ืœ;
ืกื•ืฃ
ืกื•ืฃ

-- ื‘ืฆืข ื—ื™ืคื•ืฉ
loc = geo:lookup(src);

ืื (ืœื•ืง == ืืคืก) ืื–
ื”ื—ื–ืจ ื‘ืจื™ืจืช ืžื—ื“ืœ;
ืกื•ืฃ

ืœื—ื–ื•ืจ loc;
ื—);

Map.int
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.ip ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.str
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.beg
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.sub
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.dir
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.dom
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.end
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.reg
ืขื™ื™ืŸ ื‘ืงื•ื‘ืฅ HAProxy configuration.txt, ืคืจืง "ืฉื™ืžื•ืฉ ื‘-ACL ื•ื”ื‘ืืช ื“ื•ื’ืžืื•ืช"
ื•ื›ืŸ ืชืช ืคืจืง "ื™ืกื•ื“ื•ืช ACL" ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ืฉื™ื˜ืช ื”ืชืืžืช ื”ื“ืคื•ืกื™ื ื”ื–ื•.

Map.new(file, ืฉื™ื˜ื”)
ื™ื•ืฆืจ ื•ื˜ืขืŸ ืžืคื”.

ื˜ื™ืขื•ื ื™ื

ยท ืคื™ืœื” (ืžื—ืจื•ื–ืช) - ื”ืื ื”ืงื•ื‘ืฅ ืžื›ื™ืœ ืืช ื”ืžืคื”.

ยท ืฉื™ื˜ื” (ืžืกืคืจ ืฉืœื) -- ื”ืื ืฉื™ื˜ืช ื”ืชืืžืช ื“ืคื•ืกื™ ื”ืžืคื”. ืจืื” ืืช ื”ืชื›ื•ื ื•ืช
ืฉืœ ื›ื™ืชืช ืžืคื”.

ื”ื—ื–ืจื™ื
ืื•ื‘ื™ื™ืงื˜ ืžืคืช ืžื—ืœืงื”.

ืœึดืจึฐืื•ึนืช ืชื›ื•ื ื•ืช ื”ืžืคื”.

Map.lookup(map, str)
ื‘ืฆืข ื—ื™ืคื•ืฉ ื‘ืžืคื”.

ื˜ื™ืขื•ื ื™ื

ยท ืžึทืคึผึธื” (ืžืคืช_ื›ื™ืชื”) -- ื”ืื ืื•ื‘ื™ื™ืงื˜ ืžืคืช ื”ื›ื™ืชื”.

ยท str (ืžื—ืจื•ื–ืช) -- ื”ืื ื”ืžื—ืจื•ื–ืช ืžืฉืžืฉืช ื›ืžืคืชื—.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื”ืชื•ืฆืื” ืื• ืืคืก ืื ืื™ืŸ ื”ืชืืžื”.

Map.slookup(map, str)
ื‘ืฆืข ื—ื™ืคื•ืฉ ื‘ืžืคื”.

ื˜ื™ืขื•ื ื™ื

ยท ืžึทืคึผึธื” (ืžืคืช_ื›ื™ืชื”) -- ื”ืื ืื•ื‘ื™ื™ืงื˜ ืžืคืช ื”ื›ื™ืชื”.

ยท str (ืžื—ืจื•ื–ืช) -- ื”ืื ื”ืžื—ืจื•ื–ืช ืžืฉืžืฉืช ื›ืžืคืชื—.

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื”ืชื•ืฆืื” ืื• ืžื—ืจื•ื–ืช ืจื™ืงื” ืื ืื™ืŸ ื”ืชืืžื”.

ื‘ื›ื™ืชื” AppletHTTP()
ืžื—ืœืงื” ื–ื• ืžืฉืžืฉืช ืขื ื™ื™ืฉื•ืžื•ื ื™ื ื”ื“ื•ืจืฉื™ื ืžืฆื‘ 'http'. ื™ื™ืฉื•ืžื•ืŸ http ื™ื›ื•ืœ
ืœื”ื™ื•ืช ืจืฉื•ื ืขื core.register_service() ืคื•ึผื ืงืฆึดื™ึธื”. ื”ื ืžืฉืžืฉื™ื ืขื‘ื•ืจ
ืขื™ื‘ื•ื“ ื‘ืงืฉืช http ื›ืžื• ืฉืจืช ื‘ื—ืœืง ื”ืื—ื•ืจื™ ืฉืœ HAProxy.

ื–ื”ื• ืงื•ื“ ืœื“ื•ื’ืžื” ืฉืœ hello world:

core.register_service("hello-world", "http", function(applet)
ืชื’ื•ื‘ื” ืžืงื•ืžื™ืช = "ืฉืœื•ื ืขื•ืœื!"
ื™ื™ืฉื•ืžื•ืŸ:set_status(200)
applet:add_header("content-length", string.len(response))
applet:add_header("content-type", "text/plain")
applet:start_response()
ื™ื™ืฉื•ืžื•ืŸ:ืฉืœื— (ืชื’ื•ื‘ื”)
ืกื•ืฃ)

AppletHTTP.c

ื”ื—ื–ืจื™ื
A ืžืžื™ืจื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters.

AppletHTTP.sc

ื”ื—ื–ืจื™ื
A ืžืžื™ืจื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters. ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื–ื”
ืžื—ื–ื™ืจ ืชืžื™ื“ ืžื—ืจื•ื–ืช.

AppletHTTP.f

ื”ื—ื–ืจื™ื
A ืžื‘ื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches. ืฉื™ื ืœื‘ ืฉื‘ื™ืฆื•ืข ื”ื™ื™ืฉื•ืžื•ืŸ
ืžืงื•ื ืื™ื ื• ื™ื›ื•ืœ ืœื’ืฉืช ืœืขืกืงืช ื”ืœื™ื‘ื” ืฉืœ HAProxy ื—ื•ืงื™ืช, ืื– ื“ื•ื’ืžื” ืžืกื•ื™ืžืช
ืคืงื•ืช ื”ืงืฉื•ืจื•ืช ืœืขืจื›ื™ื ื”ืชืœื•ื™ื™ื ื‘-HTTP (hdr, path, ...) ืื™ื ื ื–ืžื™ื ื™ื.

AppletHTTP.sf

ื”ื—ื–ืจื™ื
A ืžื‘ื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches. ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื–ื”
ืžื—ื–ื™ืจ ืชืžื™ื“ ืžื—ืจื•ื–ืช. ืฉื™ืžื• ืœื‘ ืฉืžืงื•ื ื”ื‘ื™ืฆื•ืข ืฉืœ ื”ื™ื™ืฉื•ืžื•ืŸ ืœื ื™ื›ื•ืœ ืœื’ืฉืช ืœ-a
ื˜ืจื ื–ืงืฆื™ื™ืช HTTP ื”ืœื™ื‘ื” ืฉืœ HAProxy ื—ื•ืงื™ืช, ืื– ื›ืžื” ืคืงืงื™ื ืœื“ื•ื’ืžื” ื”ืงืฉื•ืจื™ื ืœ-HTTP
ืขืจื›ื™ื ืชืœื•ื™ื™ื (hdr, ื ืชื™ื‘, ...) ืื™ื ื ื–ืžื™ื ื™ื.

ืฉื™ื˜ืช AppletHTTP

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช

ืฉื™ื˜ืช ื”ืชื›ื•ื ื” ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ืฉื™ื˜ืช ื”-HTTP.

AppletHTTP.version

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช

ื’ืจืกืช ื”ืชื›ื•ื ื”, ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื’ืจืกืช ื‘ืงืฉืช ื”-HTTP.

AppletHTTP.path

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช

ื ืชื™ื‘ ื”ืชื›ื•ื ื” ืžื—ื–ื™ืจ ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ื ืชื™ื‘ ื‘ืงืฉืช ื”-HTTP.

AppletHTTP.qs

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช

ื”ืชื›ื•ื ื” qs ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืืช ืžื—ืจื•ื–ืช ืฉืื™ืœืชืช ื”-HTTP.

AppletHTTP.length

ื”ื—ื–ืจื™ื
ืžืกืคืจ ืฉืœื

ืื•ืจืš ื”ืชื›ื•ื ื” ืžื—ื–ื™ืจ ืžืกืคืจ ืฉืœื ื”ืžื›ื™ืœ ืืช ืื•ืจืš ื’ื•ืฃ ื”-HTTP.

ื›ื•ืชืจื•ืช AppletHTTP

ื”ื—ื–ืจื™ื
ืžืขืจืš

ื›ื•ืชืจื•ืช ื”ืชื›ื•ื ื” ืžื—ื–ื™ืจื•ืช ืžืขืจืš ื”ืžื›ื™ืœ ืืช ื›ื•ืชืจื•ืช ื”-HTTP. ื”ื›ื•ืชืจืช
ื”ืฉืžื•ืช ืชืžื™ื“ ื‘ืื•ืชื™ื•ืช ืงื˜ื ื•ืช. ื›ืฉื ื”ื›ื•ืชืจืช ื ื™ืชืŸ ืœื”ื™ืชืงืœ ื‘ื™ื•ืชืจ ืž
ืคืขื ืื—ืช ื‘ื›ืœ ื‘ืงืฉื”, ื”ืขืจืš ืžืชื•ื•ืกืฃ ืขื 0 ื›ืขืจืš ื”ืื™ื ื“ืงืก ื”ืจืืฉื•ืŸ. ื”ืžืขืจืš
ื™ืฉ ืืช ื”ื˜ื•ืคืก ื”ื–ื”:

AppletHTTP.headers[' '][ ] = " "

AppletHTTP.headers["host"][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"

ื›ื•ืชืจื•ืช AppletHTTP
ืžื›ื™ืœ ืžืขืจืš ื”ืžื›ื™ืœ ืืช ื›ืœ ื›ื•ืชืจื•ืช ื”ื‘ืงืฉื•ืช.

AppletHTTP.set_status(applet, ืงื•ื“)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื’ื“ื™ืจื” ืืช ืงื•ื“ ืžืฆื‘ ื”-HTTP ืขื‘ื•ืจ ื”ืชื’ื•ื‘ื”. ื”ืงื•ื“ ื”ืžื•ืชืจ ื”ื•ื ืž
100 ืœ599.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

ยท ืงื•ื“ (ืžืกืคืจ ืฉืœื) -- ืงื•ื“ ื”ืžืฆื‘ ืฉื”ื•ื—ื–ืจ ืœืœืงื•ื—.

AppletHTTP.add_header(ื™ื™ืฉื•ืžื•ืŸ, ืฉื, ืขืจืš)
ืคื•ื ืงืฆื™ื” ื–ื• ื”ื•ืกืฃ ื›ื•ืชืจืช ื‘ืชื’ื•ื‘ื”. ื›ื•ืชืจื•ืช ืžืฉื•ื›ืคืœื•ืช ืื™ื ืŸ ืžื›ื•ื•ืฆื•ืช.
ื”ื›ื•ืชืจืช ื”ืžื™ื•ื—ื“ืช ืื•ืจืš ืชื•ื›ืŸ ืžืฉืžืฉ ืœืงื‘ื™ืขืช ืื•ืจืš ื”ืชื’ื•ื‘ื”. ืื ื–ื”
ืœื ืงื™ื™ื, ื ืงื™ื“ื•ื“ ื”ืขื‘ืจื”: ื ืชื— ืžื•ื’ื“ืจ, ื•ื›ืœ ื”ื›ืชื™ื‘ื” ืžื”ืคื•ื ืงืฆื™ื”
AppletHTTP:send() ืœื”ืคื•ืš ืœื ืชื—.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

ยท ืฉื (ืžื—ืจื•ื–ืช) -- ืฉื ื”ื›ื•ืชืจืช

ยท ืขืจืš (ืžื—ืจื•ื–ืช) -- ืขืจืš ื”ื›ื•ืชืจืช

AppletHTTP.start_response(ื™ื™ืฉื•ืžื•ืŸ)
ืคื•ื ืงืฆื™ื” ื–ื• ืžืฆื™ื™ื ืช ืœืžื ื•ืข ื”-HTTP ืฉื”ื•ื ื™ื›ื•ืœ ืœืขื‘ื“ ื•ืœืฉืœื•ื— ืืช
ื›ื•ืชืจื•ืช ืชื’ื•ื‘ื”. ืœืื—ืจ ื”ืงืจื™ืื” ื”ื–ื• ืœื ื ื•ื›ืœ ืœื”ื•ืกื™ืฃ ื›ื•ืชืจื•ืช ืœืชื’ื•ื‘ื”; ืึธื ื•ึผ
ืœื ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘- AppletHTTP:send() ืœืชืคืงื“ ืื AppletHTTP:start_response() ืœื
ืฉืงื•ืจืื™ื ืœื•.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

AppletHTTP.getline(applet)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืฉื•ืจื” ืื—ืช ืžื’ื•ืฃ http. ืื ื”ื ืชื•ื ื™ื
ื”ืžื•ื—ื–ืจ ืื™ื ื• ืžื›ื™ืœ '\n' ืกื•ืคื™ ืฉื”ื•ื ื”ื”ื ื—ื” ืฉืœื• ืžืืฉืจ ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื™ื ื”ืื—ืจื•ื ื™ื ืฉืœื•
ืœืคื ื™ ืกื•ืฃ ื”ื–ืจื.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช. ื”ืžื—ืจื•ื–ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจื™ืงื” ืื ื ื’ื™ืข ืœืกื•ืฃ ื”ื–ืจื.

AppletHTTP.receive(applet[, ื’ื•ื“ืœ])
ืงื•ืจื ื ืชื•ื ื™ื ืžื’ื•ืฃ ื”-HTTP, ื‘ื”ืชืื ืœืงืจื™ืื” ืฉืฆื•ื™ื ื” ื’ื•ื“ืœ. ืื ื’ื•ื“ืœ is
ื—ืกืจ, ื”ืคื•ื ืงืฆื™ื” ืžื ืกื” ืœืงืจื•ื ืืช ื›ืœ ืชื•ื›ืŸ ื”ื–ืจื ืขื“ ื”ืกื•ืฃ. ืื
ืžื” ื”ื™ื ื’ื•ื“ืœ ื’ื“ื•ืœ ื™ื•ืชืจ ืžื’ื•ืฃ http, ื”ื•ื ืžื—ื–ื™ืจ ืืช ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื”.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

ยท ื’ื•ื“ืœ (ืžืกืคืจ ืฉืœื) -- ื’ื•ื“ืœ ื”ืงืจื™ืื” ื”ื ื“ืจืฉ.

ื”ื—ื–ืจื™ื
ืชืžื™ื“ ืชื—ื–ื™ืจ ืžื—ืจื•ื–ืช, ื”ืžื—ืจื•ื–ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจื™ืงื” ืื ื”ื—ื™ื‘ื•ืจ ืกื’ื•ืจ.

AppletHTTP.send(applet, msg)
ืœืฉืœื•ื— ืืช ื”ื”ื•ื“ืขื” msg ื‘ื’ื•ืฃ ื”ื‘ืงืฉื” http.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletHTTP) -- ืืŸ AppletHTTP ื‘ื›ื™ืชื”

ยท msg (ืžื—ืจื•ื–ืช) -- ื”ื”ื•ื“ืขื” ืฉื™ืฉ ืœืฉืœื•ื—.

ื‘ื›ื™ืชื” AppletTCP()
ืžื—ืœืงื” ื–ื• ืžืฉืžืฉืช ืขื ื™ื™ืฉื•ืžื•ื ื™ื ื”ื“ื•ืจืฉื™ื ืžืฆื‘ 'tcp'. ื™ื™ืฉื•ืžื•ืŸ tcp ื™ื›ื•ืœ ืœื”ื™ื•ืช
ืจืฉื•ื ื‘- core.register_service() ืคื•ึผื ืงืฆึดื™ึธื”. ื”ื ืžืฉืžืฉื™ื ืœืขื™ื‘ื•ื“
ื–ืจื tcp ื›ืžื• ืฉืจืช ื‘ื—ืœืง ื”ืื—ื•ืจื™ ืฉืœ HAProxy.

AppletTCP.c

ื”ื—ื–ืจื™ื
A ืžืžื™ืจื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters.

AppletTCP.sc

ื”ื—ื–ืจื™ื
A ืžืžื™ืจื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Converters. ื”ืคื•ื ืงืฆื™ื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ ื–ื”
ืžื—ื–ื™ืจ ืชืžื™ื“ ืžื—ืจื•ื–ืช.

AppletTCP.f

ื”ื—ื–ืจื™ื
A ืžื‘ื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches.

AppletTCP.sf

ื”ื—ื–ืจื™ื
A ืžื‘ื™ื ื‘ื›ื™ืชื”

ืชื›ื•ื ื” ื–ื• ืžื›ื™ืœื” ืื•ื‘ื™ื™ืงื˜ ืžื—ืœืงื” Fetches.

AppletTCP.getline(applet)
ืคื•ื ืงืฆื™ื” ื–ื• ืžื—ื–ื™ืจื” ืžื—ืจื•ื–ืช ื”ืžื›ื™ืœื” ืฉื•ืจื” ืื—ืช ืžื”ื–ืจื. ืื ื”ื ืชื•ื ื™ื
ื”ืžื•ื—ื–ืจ ืื™ื ื• ืžื›ื™ืœ '\n' ืกื•ืคื™ ืฉื”ื•ื ื”ื”ื ื—ื” ืฉืœื• ืžืืฉืจ ื”ื ืชื•ื ื™ื ื”ื–ืžื™ื ื™ื ื”ืื—ืจื•ื ื™ื ืฉืœื•
ืœืคื ื™ ืกื•ืฃ ื”ื–ืจื.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletTCP) -- ืืŸ AppletTCP ื‘ื›ื™ืชื”

ื”ื—ื–ืจื™ื
ืžื—ืจื•ื–ืช. ื”ืžื—ืจื•ื–ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจื™ืงื” ืื ื ื’ื™ืข ืœืกื•ืฃ ื”ื–ืจื.

AppletTCP.receive(applet[, ื’ื•ื“ืœ])
ืงื•ืจื ื ืชื•ื ื™ื ืžื–ืจื TCP, ื‘ื”ืชืื ืœืงืจื™ืื” ืฉืฆื•ื™ื ื” ื’ื•ื“ืœ. ืื ื’ื•ื“ืœ
ื—ืกืจ, ื”ืคื•ื ืงืฆื™ื” ืžื ืกื” ืœืงืจื•ื ืืช ื›ืœ ืชื•ื›ืŸ ื”ื–ืจื ืขื“ ื”ืกื•ืฃ.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletTCP) -- ืืŸ AppletTCP ื‘ื›ื™ืชื”

ยท ื’ื•ื“ืœ (ืžืกืคืจ ืฉืœื) -- ื’ื•ื“ืœ ื”ืงืจื™ืื” ื”ื ื“ืจืฉ.

ื”ื—ื–ืจื™ื
ืชืžื™ื“ ืชื—ื–ื™ืจ ืžื—ืจื•ื–ืช, ื”ืžื—ืจื•ื–ืช ื™ื›ื•ืœื” ืœื”ื™ื•ืช ืจื™ืงื” ืื ื”ื—ื™ื‘ื•ืจ ืกื’ื•ืจ.

AppletTCP.send(appletmsg)
ืฉืœื— ืืช ื”ื”ื•ื“ืขื” ื‘ื–ืจื.

ื˜ื™ืขื•ื ื™ื

ยท ื”ื™ื™ืฉื•ืžื•ืŸ (class_AppletTCP) -- ืืŸ AppletTCP ื‘ื›ื™ืชื”

ยท msg (ืžื—ืจื•ื–ืช) -- ื”ื”ื•ื“ืขื” ืฉื™ืฉ ืœืฉืœื•ื—.

ื ื™ืชืŸ ืœืžืฆื•ื ื”ืจื‘ื” ืกืคืจื™ื•ืช lua ืฉื™ืžื•ืฉื™ื•ืช ื›ืืŸ:

ยท https://lua-toolbox.com/

ื’ื™ืฉื” Redis:

ยท https://github.com/nrk/redis-lua

ื–ื•ื”ื™ ื“ื•ื’ืžื” ืœื’ื‘ื™ ื”ืฉื™ืžื•ืฉ ื‘ืกืคืจื™ื™ืช Redis ืขื HAProxy. ืฉื™ืžื• ืœื‘ ืฉื›ืœ ืฉื™ื—ื”
ืฉืœ ื›ืœ ืคื•ื ืงืฆื™ื” ืฉืœ ืกืคืจื™ื™ื” ื–ื• ื™ื›ื•ืœ ืœื–ืจื•ืง ืฉื’ื™ืื” ืื โ€‹โ€‹ื—ื™ื‘ื•ืจ ื”ืฉืงืข ื ื›ืฉืœ.

-- ื˜ืขืŸ ืืช ืกืคืจื™ื™ืช redis
local redis = require("redis");

function do_something(txn)

- ืฆื•ืจ ื•ื—ื‘ืจ ืฉืงืข tcp ื—ื“ืฉ
ืžืงื•ืžื™ tcp = core.tcp();
tcp:ืงื‘ื™ืขืช ืคืกืง ื–ืžืŸ(1);
tcp:connect("127.0.0.1", 6379);

-- ื”ืฉืชืžืฉ ื‘ืกืคืจื™ื™ืช redis ืขื ื”ืฉืงืข ื”ื—ื“ืฉ ื”ื–ื”
ืœืงื•ื— ืžืงื•ืžื™ = redis.connect({socket=tcp});
client:ping();

ืกื•ืฃ

OpenSSL:

ยท http://mkottman.github.io/luacrypto/index.html

ยท https://github.com/brunoos/luasec/wiki

ื”ืฉืชืžืฉ ื‘-haproxy-lua ื‘ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืฉื™ืจื•ืชื™ onworks.net


ืฉืจืชื™ื ื•ืชื—ื ื•ืช ืขื‘ื•ื“ื” ื‘ื—ื™ื ื

ื”ื•ืจื“ ืืคืœื™ืงืฆื™ื•ืช Windows & Linux

  • 1
    ื–ืื‘ื™ืงืก
    ื–ืื‘ื™ืงืก
    Zabbix ื”ื™ื ืืจื’ื•ืŸ ืคืชื•ื— ื‘ื›ื™ืชื”
    ืคืชืจื•ืŸ ื ื™ื˜ื•ืจ ืžื‘ื•ื–ืจ ื‘ืžืงื•ืจ
    ื ื•ืขื“ ืœื ื˜ืจ ื•ืœืขืงื•ื‘
    ื‘ื™ืฆื•ืขื™ื ื•ื–ืžื™ื ื•ืช ืฉืœ ื”ืจืฉืช
    ืฉืจืชื™ื, ืžื›ืฉื™ืจ...
    ื”ื•ืจื“ ืืช Zabbix
  • 2
    KDiff3
    KDiff3
    ืžืื’ืจ ื–ื” ืื™ื ื• ืžืชื•ื—ื–ืง ืขื•ื“
    ื•ื ืฉืžืจ ืœืžื˜ืจื•ืช ืืจื›ื™ื•ืŸ. ืœึดืจึฐืื•ึนืช
    https://invent.kde.org/sdk/kdiff3 for
    ื”ืงื•ื“ ื”ื—ื“ืฉ ื‘ื™ื•ืชืจ ื•
    https://download.kde.o...
    ื”ื•ืจื“ ืืช KDiff3
  • 3
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX ื”ื•ื GUI ืขื‘ื•ืจ
    ืžื˜ืขื™ืŸ ื”-USB ืฉืœ Waninkoko, ืžื‘ื•ืกืก ืขืœ
    libwiigui. ื–ื” ืžืืคืฉืจ ืจื™ืฉื•ื ื•
    ืžืฉื™ืงื” ืžืฉื—ืงื™ Wii, ืžืฉื—ืงื™ Gamecube ื•
    ื‘ื™ืฉื•ืœ ื‘ื™ืชื™ ื‘-Wii ื•ื‘-WiiU...
    ื”ื•ืจื“ ืืช USBLoaderGX
  • 4
    ืฆื™ืคื•ืจ ืืฉ
    ืฆื™ืคื•ืจ ืืฉ
    Firebird RDBMS ืžืฆื™ืข ืชื›ื•ื ื•ืช ANSI SQL
    & ืคื•ืขืœ ืขืœ ืœื™ื ื•ืงืก, Windows &
    ืžืกืคืจ ืคืœื˜ืคื•ืจืžื•ืช ื™ื•ื ื™ืงืก. ืชื›ื•ื ื•ืช
    ื‘ืžืงื‘ื™ืœ ื•ื‘ื™ืฆื•ืขื™ื ืžืฆื•ื™ื ื™ื
    & ื›ื•ื—...
    ื”ื•ืจื“ ืืช Firebird
  • 5
    ืงื•ืžืคื•ื–ืจ
    ืงื•ืžืคื•ื–ืจ
    KompoZer ื”ื•ื ืขื•ืจืš HTML ืฉืœ Wysiwyg ื”ืžืฉืชืžืฉ
    ื‘ืกื™ืก ื”ืงื•ื“ ืฉืœ Mozilla Composer. ื›ืคื™ ืฉ
    ื”ืคื™ืชื•ื— ืฉืœ Nvu ื”ื•ืคืกืง
    ื‘ืฉื ืช 2005, KompoZer ืžืชืงืŸ ื‘ืื’ื™ื ืจื‘ื™ื ื•
    ืžื•ืกื™ืฃ f...
    ื”ื•ืจื“ ืืช KompoZer
  • 6
    ื”ื•ืจื“ืช ืžื ื’ื” ื‘ื—ื™ื ื
    ื”ื•ืจื“ืช ืžื ื’ื” ื‘ื—ื™ื ื
    ื”ื•ืจื“ืช ื”ืžื ื’ื” ื”ื—ื™ื ืžื™ืช (FMD) ื”ื™ื
    ื™ื™ืฉื•ื ืงื•ื“ ืคืชื•ื— ืฉื ื›ืชื‘ ื‘
    Object-Pascal ืœื ื™ื”ื•ืœ ื•
    ื”ื•ืจื“ืช ืžื ื’ื” ืžืืชืจื™ื ืฉื•ื ื™ื.
    ื–ื• ืžืจืื”...
    ื”ื•ืจื“ ื‘ื—ื™ื ื ืžื ื’ื” ื”ื•ืจื“ืช
  • ืขื•ื“ ยป

ืคืงื•ื“ื•ืช ืœื™ื ื•ืงืก

Ad