ນີ້ແມ່ນຄໍາສັ່ງ haproxy-lua ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
haproxy-lua - haproxy-lua ເອກະສານ
HAPROXY LUA ແລ່ນ ເນື້ອໃນ
ລະຫັດ Lua ທີ່ຖືກປະຕິບັດໃນ HAProxy ສາມາດປະມວນຜົນໄດ້ໃນ 2 ໂໝດຫຼັກ. ອັນທໍາອິດແມ່ນ
ການເລີ່ມຕົ້ນ ຮູບແບບການ, ແລະທີສອງແມ່ນ runtime ຮູບແບບການ.
·ໃນ ການເລີ່ມຕົ້ນ ຮູບແບບການ, ພວກເຮົາສາມາດດໍາເນີນການແກ້ໄຂ DNS, ແຕ່ພວກເຮົາບໍ່ສາມາດປະຕິບັດ socket I/O.
ໃນຮູບແບບການເລີ່ມຕົ້ນນີ້, HAProxy ຍັງຄົງຖືກບລັອກໃນລະຫວ່າງການປະຕິບັດ Lua
ໂຄງການ.
·ໃນ runtime ຮູບແບບການ, ພວກເຮົາບໍ່ສາມາດດໍາເນີນການແກ້ໄຂ DNS ໄດ້, ແຕ່ພວກເຮົາສາມາດນໍາໃຊ້ sockets. ໄດ້
ການປະຕິບັດລະຫັດ Lua ແມ່ນ multiplexed ກັບການປຸງແຕ່ງການຮ້ອງຂໍ, ສະນັ້ນລະຫັດ Lua
ເບິ່ງຄືວ່າຈະດໍາເນີນການສະກັດກັ້ນ, ແຕ່ວ່າມັນບໍ່ແມ່ນກໍລະນີ.
ລະຫັດ Lua ຖືກໂຫລດຢູ່ໃນຫນຶ່ງຫຼືຫຼາຍໄຟລ໌. ໄຟລ໌ເຫຼົ່ານີ້ປະກອບດ້ວຍລະຫັດຕົ້ນຕໍແລະຫນ້າທີ່.
Lua ມີ 6 ສະພາບການປະຕິບັດ.
1. ໄຟລ໌ Lua ຮ່າງກາຍ context. ມັນໄດ້ຖືກປະຕິບັດໃນລະຫວ່າງການໂຫຼດຂອງໄຟລ໌ Lua ໃນ
HAProxy [ທົ່ວໂລກ] ພາກສ່ວນທີ່ມີຄໍາສັ່ງ lua-load. ມັນໄດ້ຖືກປະຕິບັດໃນການເລີ່ມຕົ້ນ
ໂໝດ. ພາກນີ້ແມ່ນໃຊ້ສໍາລັບການຕັ້ງຄ່າການຜູກມັດ Lua ໃນ HAProxy.
2. ທາດຫຼວງ ໃນມັນ context. ມັນເປັນຟັງຊັນ Lua ທີ່ປະຕິບັດຫຼັງຈາກ HAProxy
paring ການຕັ້ງຄ່າ. ການປະຕິບັດແມ່ນຢູ່ໃນຮູບແບບການເລີ່ມຕົ້ນ. ໃນສະພາບການນີ້,
ສະພາບແວດລ້ອມ HAProxy ຖືກເລີ່ມຕົ້ນແລ້ວ. ມັນເປັນປະໂຫຍດທີ່ຈະກວດສອບການຕັ້ງຄ່າ, ຫຼື
ເລີ່ມຕົ້ນການເຊື່ອມຕໍ່ socket ຫຼືວຽກງານ. ຫນ້າທີ່ເຫຼົ່ານີ້ຖືກປະກາດຢູ່ໃນຮ່າງກາຍ
ສະພາບການກັບຟັງຊັນ Lua core.register_init(). ຕົ້ນແບບຂອງຫນ້າທີ່ເປັນ
ຟັງຊັນງ່າຍດາຍໂດຍບໍ່ມີຄ່າກັບຄືນແລະບໍ່ມີຕົວກໍານົດການ, ເຊັ່ນນີ້: ຫນ້າທີ່ fcn().
3. ທາດຫຼວງ ວຽກງານ context. ມັນເປັນຟັງຊັນ Lua ປະຕິບັດຫຼັງຈາກການເລີ່ມຕົ້ນຂອງ HAProxy
ຕາຕະລາງ, ແລະພຽງແຕ່ຫຼັງຈາກການປະກາດຂອງວຽກງານທີ່ມີຫນ້າທີ່ Lua
core.register_task(). ສະພາບການນີ້ສາມາດພ້ອມກັນກັບການປະມວນຜົນການຈະລາຈອນ. ມັນແມ່ນ
ປະຕິບັດໃນໂຫມດ runtime. ຕົ້ນແບບຂອງຫນ້າທີ່ເປັນຫນ້າທີ່ງ່າຍດາຍໂດຍບໍ່ມີການ
ກັບຄືນມູນຄ່າແລະບໍ່ມີຕົວກໍານົດການ, ເຊັ່ນນີ້: ຫນ້າທີ່ fcn().
4. ໄດ້ ການປະຕິບັດ context. ມັນແມ່ນຫນ້າທີ່ Lua ປະຕິບັດຕາມເງື່ອນໄຂ. ການກະທໍາເຫຼົ່ານີ້ແມ່ນ
ລົງທະບຽນໂດຍຄໍາສັ່ງ Lua "core.register_action()“.ຕົ້ນແບບຂອງຊາວລື
function ເອີ້ນວ່າເປັນ function ທີ່ບໍ່ມີຜົນຕອບແທນຫຍັງແລະເອົາວັດຖຸຂອງ
ປະເພດ TXN ເປັນການເຂົ້າ. ຫນ້າທີ່ fcn(txn).
5. ໄດ້ ຕົວຢ່າງ-fetch context. ຟັງຊັນນີ້ເອົາວັດຖຸ TXN ເປັນ argument ເຂົ້າແລະ
ຕອບສະຕຣິງ. ປະເພດຂອງຟັງຊັນເຫຼົ່ານີ້ບໍ່ສາມາດປະຕິບັດຫນ້າທີ່ສະກັດໃດໆ. ເຂົາເຈົ້າ
ມີປະໂຫຍດໃນການຮວບຮວມບາງສ່ວນຂອງຕົ້ນສະບັບ HAProxy ຕົວຢ່າງ-fetches ແລະສົ່ງຜົນໄດ້ຮັບ.
ຕົ້ນແບບຂອງຫນ້າທີ່ແມ່ນ ຫນ້າທີ່ string fcn(txn). ຫນ້າທີ່ເຫຼົ່ານີ້ສາມາດເປັນ
ລົງທະບຽນກັບຟັງຊັນ Lua core.register_fetches(). ແຕ່ລະຕົວຢ່າງທີ່ປະກາດການດຶງຂໍ້ມູນແມ່ນ
ຖືກນຳໜ້າໂດຍສະຕຣິງ "lua."
ຫມາຍເຫດ: ມັນເປັນໄປໄດ້ວ່າຟັງຊັນນີ້ບໍ່ສາມາດຊອກຫາຂໍ້ມູນທີ່ຕ້ອງການໃນຕົ້ນສະບັບ
HAProxy ຕົວຢ່າງ-fetches, ໃນກໍລະນີນີ້, ມັນບໍ່ສາມາດກັບຄືນຜົນໄດ້ຮັບ. ກໍລະນີນີ້ຍັງບໍ່ທັນໄດ້
ສະຫນັບສະຫນູນ
6. ໄດ້ converter context. ມັນເປັນຟັງຊັນ Lua ທີ່ໃຊ້ສາຍເປັນ input ແລະກັບຄືນ
ສະຕຣິງອື່ນເປັນຜົນຜະລິດ. ຟັງຊັນປະເພດເຫຼົ່ານີ້ແມ່ນບໍ່ມີລັດ, ມັນບໍ່ສາມາດເຂົ້າຫາໄດ້
ສະພາບການໃດນຶ່ງ. ພວກເຂົາບໍ່ໄດ້ປະຕິບັດຫນ້າທີ່ການຂັດຂວາງໃດໆ. ຕົ້ນແບບການໂທແມ່ນ ຫນ້າທີ່
string fcn(string). ຟັງຊັນນີ້ສາມາດລົງທະບຽນກັບຟັງຊັນ Lua
core.register_converters(). ຕົວແປງສັນຍານແຕ່ລະອັນຖືກນຳໜ້າດ້ວຍສະຕຣິງ "lua."
HAPROXY LUA HELLO WORLD
ໄຟລ໌ການຕັ້ງຄ່າ HAProxy (ສະບາຍດີ_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 (ສະບາຍດີ_world.lua):
core.register_service("hello_world", "tcp", function(applet)
applet:send("ສະບາຍດີໂລກ\n")
ສຸດທ້າຍ)
ວິທີການເລີ່ມຕົ້ນ HAProxy ສໍາລັບການທົດສອບການຕັ້ງຄ່ານີ້:
./haproxy -f hello_world.conf
ໃນເຄື່ອງອື່ນ, ທ່ານສາມາດທົດສອບດ້ວຍ telnet:
#:~ telnet 127.0.0.1 10001
ສະບາຍດີຊາວໂລກ
ລະດັບ ຫຼັກ()
ຫ້ອງຮຽນ "ຫຼັກ" ປະກອບມີຟັງຊັນຫຼັກ HAProxy ທັງໝົດ. ຟັງຊັນເຫຼົ່ານີ້ແມ່ນມີປະໂຫຍດ
ສໍາລັບການຄວບຄຸມການໄຫຼຂອງການປະຕິບັດ, ການລົງທະບຽນ hooks, manipulating ແຜນທີ່ທົ່ວໂລກ
ຫຼື ACL, ...
ຫ້ອງຮຽນ "ຫຼັກ" ໂດຍພື້ນຖານແລ້ວແມ່ນສະຫນອງໃຫ້ກັບ HAProxy. ບໍ່ ຕ້ອງການ ເສັ້ນແມ່ນຕ້ອງການ
ໃຊ້ຟັງຊັນເຫຼົ່ານີ້.
ຫ້ອງຮຽນ "ຫຼັກ" ແມ່ນຄົງທີ່, ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະສ້າງວັດຖຸໃຫມ່ຂອງປະເພດນີ້.
core.emerge
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບການລະບົບ "ການສຸກເສີນ"
(0).
core.alert
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບ loglevel "ເຕືອນ" (1).
core.crit
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບ loglevel "critical" (2).
core.err
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ແມ່ນເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄ່າຂອງລະດັບ loglevel "ຄວາມຜິດພາດ" (3).
core.warning
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບ loglevel "ຄໍາເຕືອນ" (4).
core.notice
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບການ "ແຈ້ງການ" (5).
core.info
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບ loglevel "ຂໍ້ມູນ" (6).
core.debug
ຜົນຕອບແທນ
integer
ຄຸນລັກສະນະນີ້ເປັນຈໍານວນເຕັມ, ມັນປະກອບດ້ວຍຄຸນຄ່າຂອງລະດັບ loglevel "debug" (7).
core.log(ລະດັບບັນທຶກ, ຂໍ້ຄວາມ)
context: body, init, task, action, sample-fetch, converter
ຟັງຊັນນີ້ສົ່ງບັນທຶກ. ບັນທຶກຖືກສົ່ງ, ອີງຕາມ HAProxy
ໄຟລ໌ການຕັ້ງຄ່າ, ຢູ່ໃນເຄື່ອງແມ່ຂ່າຍ syslog ເລີ່ມຕົ້ນຖ້າມັນຖືກຕັ້ງຄ່າແລະຢູ່ໃນ
stderr ຖ້າມັນຖືກອະນຸຍາດ.
Arguments
· loglevel (integer) -- ລະດັບບັນທຶກທີ່ກ່ຽວຂ້ອງກັບຂໍ້ຄວາມ. ມັນເປັນ
ຕົວເລກລະຫວ່າງ 0 ຫາ 7.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ core.emerg, core.alert, core.crit, core.err, core.warning, core.notice,
core.info, core.debug (ຄໍານິຍາມລະດັບບັນທຶກ)
ເບິ່ງ code.Debug
ເບິ່ງ ຫຼັກ.ຂໍ້ມູນ
ເບິ່ງ ຫຼັກ.ຄຳເຕືອນ
ເບິ່ງ ຫຼັກ.ເຕືອນ
ຫຼັກ.ດີບັກ(ຂໍ້ຄວາມ)
context: body, init, task, action, sample-fetch, converter
Arguments
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ log
ເຮັດວຽກດຽວກັນກັບ:
ຫນ້າທີ່ Debug(ຂໍ້ຄວາມ)
core.log(core.debug, msg)
ໃນຕອນທ້າຍ
ຫຼັກ.ຂໍ້ມູນ(ຂໍ້ຄວາມ)
context: body, init, task, action, sample-fetch, converter
Arguments
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ log
ຫນ້າທີ່ ຂໍ້ມູນ(ຂໍ້ຄວາມ)
core.log(core.info, msg)
ໃນຕອນທ້າຍ
ຫຼັກ.ຄຳເຕືອນ(ຂໍ້ຄວາມ)
context: body, init, task, action, sample-fetch, converter
Arguments
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ log
ຫນ້າທີ່ ການເຕືອນໄພ(ຂໍ້ຄວາມ)
core.log(core.warning, msg)
ໃນຕອນທ້າຍ
ຫຼັກ.ເຕືອນ(ຂໍ້ຄວາມ)
context: body, init, task, action, sample-fetch, converter
Arguments
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ log
ຫນ້າທີ່ ເຕືອນ(ຂໍ້ຄວາມ)
core.log(core.alert, msg)
ໃນຕອນທ້າຍ
core.add_acl(ຊື່ໄຟລ໌, ທີ່ສໍາຄັນ)
context: init, task, action, sample-fetch, converter
ເພີ່ມ ACL ທີ່ສໍາຄັນ ໃນບັນຊີລາຍຊື່ ACLs ທີ່ອ້າງອີງໂດຍໄຟລ໌ ຊື່ເອກະສານ.
Arguments
· ຊື່ເອກະສານ (string) -- ຊື່ໄຟລ໌ທີ່ອ້າງອີງລາຍການ ACL.
· ທີ່ສໍາຄັນ (string) -- ທີ່ສໍາຄັນທີ່ຈະໄດ້ຮັບການເພີ່ມ.
core.del_acl(ຊື່ໄຟລ໌, ທີ່ສໍາຄັນ)
context: init, task, action, sample-fetch, converter
ລົບລາຍການ ACL ທີ່ອ້າງອີງໂດຍຄີ ທີ່ສໍາຄັນ ໃນບັນຊີລາຍຊື່ຂອງ ACLs ອ້າງອີງໂດຍ
ຊື່ເອກະສານ.
Arguments
· ຊື່ເອກະສານ (string) -- ຊື່ໄຟລ໌ທີ່ອ້າງອີງລາຍການ ACL.
· ທີ່ສໍາຄັນ (string) -- ກະແຈທີ່ຈະຖືກລຶບ.
core.del_map(ຊື່ໄຟລ໌, ທີ່ສໍາຄັນ)
context: init, task, action, sample-fetch, converter
ລົບລາຍການແຜນທີ່ທີ່ຖືກດັດສະນີດ້ວຍກະແຈທີ່ລະບຸໄວ້ໃນລາຍການແຜນທີ່ອ້າງອີງ
ໂດຍຊື່ໄຟລ໌ຂອງລາວ.
Arguments
· ຊື່ເອກະສານ (string) -- ຊື່ໄຟລ໌ທີ່ອ້າງອີງລາຍການແຜນທີ່.
· ທີ່ສໍາຄັນ (string) -- ກະແຈທີ່ຈະຖືກລຶບ.
core.msleep(ມິນລິວິນາທີ)
context: body, init, task, action
ໄດ້ core.msleep() ຢຸດການປະຕິບັດ Lua ລະຫວ່າງມິນລິວິນາທີທີ່ລະບຸ.
Arguments
· ມິນລິລິດ (integer) -- milliseconds ທີ່ຕ້ອງການ.
core.register_action(ຊື່, ການກະ ທຳ, ມ່ວນ)
context: ຮ່າງກາຍ
ລົງທະບຽນຟັງຊັນ Lua ຖືກປະຕິບັດເປັນການກະທໍາ. ການປະຕິບັດທັງຫມົດທີ່ລົງທະບຽນສາມາດຖືກນໍາໃຊ້
ໃນ HAProxy ທີ່ມີຄໍານໍາຫນ້າ "lua." ຄຳສັ່ງໄດ້ຮັບຊັ້ນວັດຖຸ TXN ເປັນການປ້ອນຂໍ້ມູນ.
Arguments
· ຊື່ (string) -- ແມ່ນຊື່ຂອງຕົວແປງສັນຍານ.
· ຫຸ້ນ (ຕາຕະລາງ) -- ແມ່ນຕາຕະລາງຂອງສະຕຣິງທີ່ອະທິບາຍການປະຕິບັດ HAProxy ໃຜ
ຕ້ອງການລົງທະບຽນກັບ. ການປະຕິບັດທີ່ຄາດໄວ້ແມ່ນ 'tcp-req', 'tcp-res',
'http-req' ຫຼື 'http-res'.
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຟັງຊັນ Lua ເອີ້ນວ່າເຮັດວຽກເປັນຕົວແປງສັນຍານ.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
ຟັງຊັນ(txn)
·
txn (TXN ລະດັບ): ນີ້ is a TXN ຈຸດປະສົງ ໃຫມ່ ສໍາລັບການ manipulating ໄດ້
ການຮ້ອງຂໍໃນປະຈຸບັນຫຼື TCP stream.
ທີ່ນີ້, ຕົວຢ່າງຂອງການລົງທະບຽນການປະຕິບັດ. ການປະຕິບັດພຽງແຕ່ສົ່ງ 'ສະບາຍດີໂລກ' ໃນ
ບັນທຶກ.
core.register_action("hello-world", { "tcp-req", "http-req" }, function(txn)
txn:Info("ສະບາຍດີໂລກ")
ສຸດທ້າຍ)
ລະຫັດຕົວຢ່າງນີ້ຖືກນໍາໃຊ້ໃນການຕັ້ງຄ່າ HAproxy ແບບນີ້:
ດ້ານຫນ້າ tcp_frt
tcp ຮູບແບບ
tcp-request content lua.hello-world
ດ້ານໜ້າ http_frt
ໂຫມດ http
http-request lua.hello-world
core.register_converters(ຊື່, ມ່ວນ)
context: ຮ່າງກາຍ
ລົງທະບຽນຟັງຊັນ Lua ທີ່ປະຕິບັດເປັນຕົວແປງສັນຍານ. ທັງຫມົດ converters ລົງທະບຽນສາມາດ
ໃຊ້ໃນ HAProxy ດ້ວຍຄຳນຳໜ້າ "lua." ຕົວແປງສັນຍານໄດ້ຮັບສາຍເປັນ input ແລະ
ສົ່ງຄືນສະຕຣິງເປັນຜົນຜະລິດ. ຟັງຊັນທີ່ລົງທະບຽນສາມາດໃຊ້ເວລາເຖິງ 9 ຄ່າເປັນ
ພາລາມິເຕີ. ຄ່າທັງໝົດແມ່ນສະຕຣິງ.
Arguments
· ຊື່ (string) -- ແມ່ນຊື່ຂອງຕົວແປງສັນຍານ.
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຟັງຊັນ Lua ເອີ້ນວ່າເຮັດວຽກເປັນຕົວແປງສັນຍານ.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
function(str, [p1 [, p2 [, ... [, p5]]]])
· str (string): ນີ້ແມ່ນຄ່າການປ້ອນຂໍ້ມູນອັດຕະໂນມັດປ່ຽນເປັນສະຕຣິງ.
· p1 .. p5 (string): ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງ string arguments ປະກາດໃນ haroxy
ໄຟລ໌ການຕັ້ງຄ່າ. ຈໍານວນຂອງການໂຕ້ຖຽງບໍ່ເກີນ 5. ຄໍາສັ່ງແລະ
ລັກສະນະຂອງສິ່ງເຫຼົ່ານີ້ແມ່ນເລືອກຕາມປົກກະຕິໂດຍຜູ້ພັດທະນາ.
core.register_fetches(ຊື່, ມ່ວນ)
context: ຮ່າງກາຍ
ລົງທະບຽນຟັງຊັນ Lua ຖືກປະຕິບັດເປັນຕົວຢ່າງການດຶງຂໍ້ມູນ. ການດຶງເອົາຕົວຢ່າງທີ່ລົງທະບຽນທັງໝົດ
ສາມາດໃຊ້ໃນ HAProxy ດ້ວຍຄຳນຳໜ້າ "lua." ການດຶງຕົວຢ່າງ Lua ສົ່ງຄືນສະຕຣິງ
ເປັນຜົນຜະລິດ. ຟັງຊັນທີ່ລົງທະບຽນສາມາດເອົາເຖິງ 9 ຄ່າເປັນພາລາມິເຕີ. ທັງໝົດ
ຄ່າແມ່ນສະຕຣິງ.
Arguments
· ຊື່ (string) -- ແມ່ນຊື່ຂອງຕົວແປງສັນຍານ.
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຫນ້າທີ່ Lua ເອີ້ນວ່າເຮັດວຽກເປັນຕົວຢ່າງ fetch.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
ຟັງຊັນສະຕຣິງ(txn, [p1 [, p2 [, ... [, p5]]]])
· txn (TXN ລະດັບ): ນີ້ແມ່ນວັດຖຸ txn ທີ່ກ່ຽວຂ້ອງກັບຄໍາຮ້ອງຂໍໃນປະຈຸບັນ.
· p1 .. p5 (string): ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງ string arguments ປະກາດໃນ haroxy
ໄຟລ໌ການຕັ້ງຄ່າ. ຈໍານວນຂອງການໂຕ້ຖຽງບໍ່ເກີນ 5. ຄໍາສັ່ງແລະ
ລັກສະນະຂອງສິ່ງເຫຼົ່ານີ້ແມ່ນເລືອກຕາມປົກກະຕິໂດຍຜູ້ພັດທະນາ.
· ຜົນຕອບແທນ: ສະຕຣິງທີ່ມີຂໍ້ມູນບາງອັນ, ບໍ່ແມ່ນຖ້າຄ່າບໍ່ສາມາດສົ່ງຄືນໄດ້ໃນຕອນນີ້.
lua ຕົວຢ່າງລະຫັດ:
core.register_fetches("ສະບາຍດີ", ຟັງຊັນ(txn)
ກັບຄືນ "ສະບາຍດີ"
ສຸດທ້າຍ)
ການຕັ້ງຄ່າຕົວຢ່າງ HAProxy:
ຕົວຢ່າງ frontend
http-request redirect location /%[lua.hello]
core.register_service(ຊື່, ຮູບແບບ, ມ່ວນ)
context: ຮ່າງກາຍ
ລົງທະບຽນຟັງຊັນ Lua ທີ່ປະຕິບັດເປັນການບໍລິການ. ການບໍລິການທີ່ລົງທະບຽນທັງຫມົດສາມາດເປັນ
ໃຊ້ໃນ HAProxy ດ້ວຍຄຳນຳໜ້າ "lua." ການບໍລິການໄດ້ຮັບຊັ້ນວັດຖຸເປັນການປ້ອນຂໍ້ມູນ
ອີງຕາມຮູບແບບທີ່ຕ້ອງການ.
Arguments
· ຊື່ (string) -- ແມ່ນຊື່ຂອງຕົວແປງສັນຍານ.
· ຮູບແບບການ (string) -- ແມ່ນສະຕຣິງທີ່ອະທິບາຍຮູບແບບທີ່ຕ້ອງການ. ພຽງແຕ່ 'tcp' ຫຼື
ອະນຸຍາດ 'http'.
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຟັງຊັນ Lua ເອີ້ນວ່າເຮັດວຽກເປັນຕົວແປງສັນຍານ.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
ຟັງຊັນ(applet)
· applet applet ຈະເປັນ AppletTCP ລະດັບ ຫຼື AppleTTP ລະດັບ. ມັນຂຶ້ນກັບປະເພດ
ຂອງ applet ລົງທະບຽນ. applet ທີ່ລົງທະບຽນດ້ວຍຄ່າ 'http' ສໍາລັບ ຮູບແບບການ
ພາລາມິເຕີຈະໄດ້ຮັບ a AppleTTP ລະດັບທີ່ຢູ່ ຖ້າຫາກວ່າ ຮູບແບບການ ຄ່າແມ່ນ 'tcp', applet ຈະ
ໄດ້ຮັບ AppletTCP ລະດັບ.
ການເຕືອນໄພ: Applets ປະເພດ 'http' ບໍ່ສາມາດຖືກເອີ້ນຈາກ 'tcp-' ກົດລະບຽບ. ພຽງແຕ່ ໄດ້ 'http-'
rulesets ໄດ້ຖືກອະນຸຍາດ, ນີ້ຫມາຍຄວາມວ່າເປັນໄປບໍ່ໄດ້ທີ່ຈະໂທຫາ applet HTTP ຈາກ a
ຕົວແທນໃນໂຫມດ tcp. Applets ປະເພດ 'tcp' ສາມາດເອີ້ນໄດ້ຈາກທຸກບ່ອນ.
ທີ່ນີ້, ຕົວຢ່າງຂອງການລົງທະບຽນການບໍລິການ. ການບໍລິການພຽງແຕ່ສົ່ງ 'ສະບາຍດີໂລກ' ເປັນ
http ຕອບສະຫນອງ.
core.register_service("hello-world", "http", function(applet)
local response = "ສະບາຍດີໂລກ !"
ແອັບເປິ້ນ:set_status(200)
applet:add_header("ຄວາມຍາວຂອງເນື້ອຫາ", string.len(ຕອບສະຫນອງ))
applet:add_header("ປະເພດເນື້ອຫາ", "ຂໍ້ຄວາມ/ທຳມະດາ")
applet:start_response()
applet: ສົ່ງ (ຕອບສະຫນອງ)
ສຸດທ້າຍ)
ລະຫັດຕົວຢ່າງນີ້ຖືກນໍາໃຊ້ໃນການຕັ້ງຄ່າ HAproxy ແບບນີ້:
ຕົວຢ່າງ frontend
http-request use-service lua.hello-world
core.register_init(func)
context: ຮ່າງກາຍ
ລົງທະບຽນຟັງຊັນທີ່ປະຕິບັດຫຼັງຈາກການວິເຄາະການຕັ້ງຄ່າ. ນີ້ແມ່ນເປັນປະໂຫຍດກັບ
ກວດເບິ່ງຕົວກໍານົດການໃດໆ.
Arguments
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຟັງຊັນ Lua ເອີ້ນວ່າເຮັດວຽກເປັນເບື້ອງຕົ້ນ.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
ຟັງຊັນ()
ມັນບໍ່ໃຊ້ວັດສະດຸປ້ອນ, ແລະບໍ່ມີຜົນຜະລິດທີ່ຄາດວ່າຈະມີ.
core.register_task(func)
context: body, init, task, action, sample-fetch, converter
ລົງທະບຽນແລະເລີ່ມຕົ້ນວຽກງານເອກະລາດ. ວຽກງານແມ່ນເລີ່ມຕົ້ນເມື່ອ HAProxy ຫຼັກ
ຕາຕະລາງເລີ່ມຕົ້ນ. ສໍາລັບຕົວຢ່າງ, ປະເພດຂອງວຽກງານນີ້ສາມາດຖືກປະຕິບັດເພື່ອປະຕິບັດສະລັບສັບຊ້ອນ
ກວດສຸຂະພາບ.
Arguments
· ມ່ວນ (ຫນ້າທີ່) -- ແມ່ນຟັງຊັນ Lua ເອີ້ນວ່າເຮັດວຽກເປັນເບື້ອງຕົ້ນ.
ຕົ້ນແບບຂອງຟັງຊັນ Lua ທີ່ໃຊ້ເປັນການໂຕ້ຖຽງຄື:
ຟັງຊັນ()
ມັນບໍ່ໃຊ້ວັດສະດຸປ້ອນ, ແລະບໍ່ມີຜົນຜະລິດທີ່ຄາດວ່າຈະມີ.
core.set_nice(ງາມ)
context: task, action, sample-fetch, converter
ປ່ຽນສິ່ງທີ່ດີຂອງໜ້າວຽກປັດຈຸບັນ ຫຼື ຊ່ວງເວລາປະຈຸບັນ.
Arguments
· ງາມ (integer) -- ຄ່າທີ່ດີ, ມັນຕ້ອງຢູ່ລະຫວ່າງ -1024 ຫາ 1024.
core.set_map(ຊື່ໄຟລ໌, key, ມູນຄ່າ)
context: init, task, action, sample-fetch, converter
ກໍານົດມູນຄ່າ ມູນຄ່າ ກ່ຽວຂ້ອງກັບກະແຈ ທີ່ສໍາຄັນ ໃນແຜນທີ່ອ້າງອີງໂດຍ ຊື່ເອກະສານ.
Arguments
· ຊື່ເອກະສານ (string) -- ແຜນທີ່ອ້າງອີງ
· ທີ່ສໍາຄັນ (string) -- ກຸນແຈເພື່ອຕັ້ງ ຫຼືປ່ຽນແທນ
· ມູນຄ່າ (string) -- ຄ່າທີ່ກ່ຽວຂ້ອງ
core.sleep(int ວິນາທີ)
context: body, init, task, action
ໄດ້ core.sleep() ຟັງຊັນຢຸດການປະຕິບັດ Lua ລະຫວ່າງວິນາທີທີ່ລະບຸ.
Arguments
· ວິນາທີ (integer) -- ວິນາທີທີ່ຕ້ອງການ.
core.tcp()
context: init, task, action
ຟັງຊັນນີ້ສົ່ງຄືນວັດຖຸໃຫມ່ຂອງ a socket ຊັ້ນຮຽນ.
ຜົນຕອບແທນ
A Socket ລະດັບ ວັດຖຸ
core.done(ຂໍ້ມູນ)
context: body, init, task, action, sample-fetch, converter
Arguments
· ຂໍ້ມູນ (ໃດ) -- ກັບຄືນບາງຂໍ້ມູນສໍາລັບຜູ້ໂທ. ມັນເປັນປະໂຫຍດກັບ
sample-fetches ແລະຕົວຢ່າງ- converters.
ທັນທີຢຸດເຊົາການປະຕິບັດ Lua ໃນປັດຈຸບັນແລະກັບຄືນໄປຫາຜູ້ໂທທີ່ອາດຈະເປັນ
ການດຶງຕົວຢ່າງ, ຕົວແປງສັນຍານ ຫຼືການກະທຳໃດໜຶ່ງ ແລະສົ່ງຄືນຄ່າທີ່ລະບຸໄວ້ (ບໍ່ສົນໃຈ
ສໍາລັບການປະຕິບັດ). ມັນຖືກນໍາໃຊ້ໃນເວລາທີ່ຂະບວນການ LUA ສໍາເລັດການເຮັດວຽກຂອງມັນແລະຕ້ອງການໃຫ້
ກັບຄືນການຄວບຄຸມໄປຫາ HAProxy ໂດຍບໍ່ມີການປະຕິບັດລະຫັດທີ່ຍັງເຫຼືອ. ມັນສາມາດໄດ້ຮັບການເຫັນວ່າເປັນ
"ກັບຄືນ".
core.yield()
context: task, action, sample-fetch, converter
ມອບມືໃຫ້ກັບຕົວກໍານົດເວລາ HAProxy. ມັນຖືກນໍາໃຊ້ໃນເວລາທີ່ການປຸງແຕ່ງ LUA
ໃຊ້ເວລາປຸງແຕ່ງຫຼາຍ.
ລະດັບ ດຶງຂໍ້ມູນ()
ຫ້ອງຮຽນນີ້ປະກອບມີການດຶງຕົວຢ່າງ HAProxy ພາຍໃນຫຼາຍອັນ. ເບິ່ງ HAProxy
ເອກະສານ "configuration.txt" ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການນໍາໃຊ້ຂອງນາງ. ພວກເຂົາແມ່ນ
ບົດທີ 7.3.2 ຫາ 7.3.6.
ການເຕືອນໄພ ການດຶງຕົວຢ່າງບາງອັນແມ່ນບໍ່ມີຢູ່ໃນບາງສະພາບການ. ຂໍ້ຈໍາກັດເຫຼົ່ານີ້
ຖືກລະບຸໄວ້ໃນເອກະສານນີ້ເມື່ອພວກມັນເປັນປະໂຫຍດ.
ເບິ່ງ TXN.f
ເບິ່ງ TXN.sf
Fetches ແມ່ນເປັນປະໂຫຍດສໍາລັບ:
·ໄດ້ຮັບທີ່ໃຊ້ເວລາລະບົບ,
·ໄດ້ຮັບການປ່ຽນແປງສະພາບແວດລ້ອມ,
·ໄດ້ຮັບຈໍານວນ Random,
·ສະຖານະ backend ທີ່ຮູ້ຈັກເຊັ່ນ: ຈໍານວນຜູ້ໃຊ້ຢູ່ໃນຄິວຫຼືຈໍານວນຂອງ
ການເຊື່ອມຕໍ່ທີ່ສ້າງຕັ້ງຂຶ້ນ,
· ຂໍ້ມູນລູກຄ້າເຊັ່ນແຫຼ່ງ ip ຫຼືຈຸດຫມາຍປາຍທາງ,
·ຈັດການກັບຕາຕະລາງໄມ້,
· ຂໍ້ມູນ SSL ສ້າງຕັ້ງຂຶ້ນ,
· ຂໍ້ມູນ HTTP ເຊັ່ນ: ສ່ວນຫົວ ຫຼືວິທີການ.
ການປະຕິບັດຫນ້າທີ່ (txn)
-- ເອົາ IP ແຫຼ່ງ
local clientip = txn.f:src()
ໃນຕອນທ້າຍ
ລະດັບ ຕົວປ່ຽນ()
ຫ້ອງຮຽນນີ້ມີຕົວປ່ຽນຕົວຢ່າງ HAProxy ພາຍໃນຫຼາຍອັນ. ເບິ່ງ HAProxy
ເອກະສານ "configuration.txt" ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການນໍາໃຊ້ຂອງນາງ. ຂອງມັນ
ບົດທີ 7.3.1.
ເບິ່ງ TXN.c
ເບິ່ງ TXN.sc
Converters ສະຫນອງການຫັນເປັນ statefull. ພວກມັນເປັນປະໂຫຍດສໍາລັບ:
· ການປ່ຽນແປງການປ້ອນຂໍ້ມູນກັບ base64,
· ການນໍາໃຊ້ hash ກ່ຽວກັບການປ້ອນຂໍ້ມູນ (djb2, crc32, sdbm, wt6),
·ວັນທີຮູບແບບ,
· json ຫນີ,
·ການສະກັດພາສາທີ່ຕ້ອງການປຽບທຽບສອງບັນຊີລາຍການ,
· ປ່ຽນເປັນຕົວອັກສອນຕ່ໍາຫຼືເທິງ,
·ຈັດການກັບຕາຕະລາງໄມ້.
ລະດັບ ຊ່ອງ()
HAProxy ໃຊ້ສອງ buffers ສໍາລັບການປະມວນຜົນການຮ້ອງຂໍ. ອັນທໍາອິດແມ່ນໃຊ້
ກັບຂໍ້ມູນການຮ້ອງຂໍ (ຈາກລູກຄ້າກັບເຄື່ອງແມ່ຂ່າຍ) ແລະທີສອງແມ່ນໃຊ້ສໍາລັບ
ຂໍ້ມູນການຕອບສະຫນອງ (ຈາກເຄື່ອງແມ່ຂ່າຍກັບລູກຄ້າ).
ແຕ່ລະ buffer ມີຂໍ້ມູນສອງປະເພດ. ປະເພດທໍາອິດແມ່ນຂໍ້ມູນທີ່ເຂົ້າມາລໍຖ້າ
ສໍາລັບການປຸງແຕ່ງ. ສ່ວນທີສອງແມ່ນຂໍ້ມູນຂາອອກທີ່ຖືກປຸງແຕ່ງແລ້ວ. ປົກກະຕິແລ້ວ,
ຂໍ້ມູນທີ່ມາແມ່ນໄດ້ຮັບການປຸງແຕ່ງ, ຫຼັງຈາກທີ່ມັນໄດ້ຖືກ tagged ເປັນຂໍ້ມູນລາຍຈ່າຍ, ແລະສຸດທ້າຍມັນ
ຖືກສົ່ງ. ຫນ້າທີ່ຕໍ່ໄປນີ້ສະຫນອງເຄື່ອງມືສໍາລັບການຈັດການຂໍ້ມູນເຫຼົ່ານີ້ຢູ່ໃນ a
buffer
ແຜນວາດຕໍ່ໄປນີ້ສະແດງໃຫ້ເຫັນບ່ອນທີ່ຟັງຊັນຊັ້ນຊ່ອງຖືກນຳໃຊ້.
ການເຕືອນໄພ: ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະອ່ານຈາກການຕອບສະຫນອງໃນການປະຕິບັດການຮ້ອງຂໍ, ແລະມັນແມ່ນ
ບໍ່ສາມາດອ່ານສໍາລັບຊ່ອງທາງການຮ້ອງຂໍໃນການດໍາເນີນການຕອບສະຫນອງ.
[ຮູບພາບ]
Channel.dup(ຊ່ອງ)
ຟັງຊັນນີ້ສົ່ງຄືນສະຕຣິງທີ່ມີ buffer ທັງໝົດ. ຂໍ້ມູນບໍ່ແມ່ນ
ເອົາອອກຈາກ buffer ແລະສາມາດດໍາເນີນການໃຫມ່ພາຍຫຼັງ.
ຖ້າບັຟເຟີບໍ່ສາມາດຮັບຂໍ້ມູນເພີ່ມເຕີມໄດ້, ຄ່າ 'nil' ຈະຖືກສົ່ງຄືນ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຂໍ້ມູນທັງໝົດທີ່ມີຢູ່ ຫຼືບໍ່ມີ.
Channel.get(ຊ່ອງ)
ຟັງຊັນນີ້ສົ່ງຄືນສະຕຣິງທີ່ມີ buffer ທັງໝົດ. ຂໍ້ມູນຖືກບໍລິໂພກ
ຈາກ buffer ໄດ້.
ຖ້າບັຟເຟີບໍ່ສາມາດຮັບຂໍ້ມູນເພີ່ມເຕີມໄດ້, ຄ່າ 'nil' ຈະຖືກສົ່ງຄືນ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຂໍ້ມູນທັງໝົດທີ່ມີຢູ່ ຫຼືບໍ່ມີ.
Channel.getline(ຊ່ອງ)
ຟັງຊັນນີ້ສົ່ງຄືນສະຕຣິງທີ່ມີແຖວທຳອິດຂອງ buffer. ຂໍ້ມູນ
ຖືກບໍລິໂພກ. ຖ້າຂໍ້ມູນທີ່ສົ່ງຄືນບໍ່ມີ 'n' ສຸດທ້າຍທີ່ສົມມຸດວ່າຂອງມັນ
ຂໍ້ມູນສຸດທ້າຍທີ່ມີຢູ່ໃນ buffer.
ຖ້າບັຟເຟີບໍ່ສາມາດຮັບຂໍ້ມູນເພີ່ມເຕີມໄດ້, ຄ່າ 'nil' ຈະຖືກສົ່ງຄືນ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີເສັ້ນທີ່ມີ ຫຼື nil.
Channel.set(ຊ່ອງ, ສະຕຣິງ)
ຟັງຊັນນີ້ແທນເນື້ອໃນຂອງ buffer ໂດຍສະຕຣິງ. ຟັງຊັນກັບຄືນມາ
ຄວາມຍາວທີ່ຄັດລອກ, ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຈະກັບຄືນມາ -1.
ຊຸດຂໍ້ມູນທີ່ມີຟັງຊັນນີ້ບໍ່ໄດ້ຖືກສົ່ງ. ພວກເຂົາລໍຖ້າການສິ້ນສຸດຂອງ HAProxy
ການປຸງແຕ່ງ, ດັ່ງນັ້ນ buffer ສາມາດເຕັມ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
· string (string) -- ຂໍ້ມູນທີ່ຈະສົ່ງ.
ຜົນຕອບແທນ
ຈຳນວນເຕັມທີ່ບັນຈຸມີຈຳນວນໄບຕ໌ທີ່ສຳເນົາ ຫຼື -1.
Channel.append(ຊ່ອງ, ສະຕຣິງ)
ຟັງຊັນນີ້ຕໍ່ທ້າຍ string argument ກັບເນື້ອໃນຂອງ buffer. ຫນ້າທີ່
ສົ່ງຄືນຄວາມຍາວທີ່ສຳເນົາໄວ້, ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຈະສົ່ງກັບ -1.
ຊຸດຂໍ້ມູນທີ່ມີຟັງຊັນນີ້ບໍ່ໄດ້ຖືກສົ່ງ. ພວກເຂົາລໍຖ້າການສິ້ນສຸດຂອງ HAProxy
ການປຸງແຕ່ງ, ດັ່ງນັ້ນ buffer ສາມາດເຕັມ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
· string (string) -- ຂໍ້ມູນທີ່ຈະສົ່ງ.
ຜົນຕອບແທນ
ຈຳນວນເຕັມທີ່ບັນຈຸມີຈຳນວນໄບຕ໌ທີ່ສຳເນົາ ຫຼື -1.
Channel.send(ຊ່ອງ, ສະຕຣິງ)
ຟັງຊັນນີ້ຕ້ອງການການສົ່ງຂໍ້ມູນທັນທີ. ເວັ້ນເສຍແຕ່ວ່າການເຊື່ອມຕໍ່ແມ່ນ
ປິດ, buffer ແມ່ນເປັນປົກກະຕິ flushed ແລະສາຍທັງຫມົດສາມາດຖືກສົ່ງໄປ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
· string (string) -- ຂໍ້ມູນທີ່ຈະສົ່ງ.
ຜົນຕອບແທນ
ຈຳນວນເຕັມທີ່ບັນຈຸມີຈຳນວນໄບຕ໌ທີ່ສຳເນົາ ຫຼື -1.
Channel.get_in_length(ຊ່ອງ)
ຟັງຊັນນີ້ສົ່ງຄືນຄວາມຍາວຂອງສ່ວນປ້ອນຂໍ້ມູນຂອງ buffer.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
ຜົນຕອບແທນ
ຈຳນວນເຕັມທີ່ບັນຈຸມີຈຳນວນໄບຕ໌ທີ່ມີຢູ່.
Channel.get_out_length(ຊ່ອງ)
ຟັງຊັນນີ້ສົ່ງຄືນຄວາມຍາວຂອງສ່ວນຜົນຜະລິດຂອງ buffer.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
ຜົນຕອບແທນ
ຈຳນວນເຕັມທີ່ບັນຈຸມີຈຳນວນໄບຕ໌ທີ່ມີຢູ່.
Channel.forward(ຊ່ອງ, int)
ຟັງຊັນນີ້ໂອນ bytes ຈາກສ່ວນປ້ອນຂໍ້ມູນຂອງ buffer ໄປຫາສ່ວນຜົນຜະລິດ.
Arguments
· ຊ່ອງ (class_channel) -- ຊ່ອງທາງການຫມູນໃຊ້.
· int (integer) -- ຈໍານວນຂໍ້ມູນທີ່ຈະຖືກສົ່ງຕໍ່.
ລະດັບ HTTP()
ຫ້ອງຮຽນນີ້ມີຟັງຊັນການຈັດການ HTTP ທັງໝົດ.
HTTP.req_get_headers(http)
ສົ່ງຄືນອາເຣທີ່ມີສ່ວນຫົວຄຳຮ້ອງຂໍທັງໝົດ.
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
ຜົນຕອບແທນ
array ຂອງ headers.
ເບິ່ງ HTTP.res_get_headers()
ນີ້ແມ່ນຮູບແບບຂອງ array ທີ່ສົ່ງຄືນ:
HTTP:req_get_headers()[' '][ ] = " "
local hdr = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["ຍອມຮັບ"][0] = "ສຽງ/ພື້ນຖານ q=1"
hdr["ຍອມຮັບ"][1] = "ສຽງ/*, q=0.2"
hdr["ຍອມຮັບ"][2] = "*/*, q=0.1"
HTTP.res_get_headers(http)
ສົ່ງຄືນອາເຣທີ່ມີສ່ວນຫົວຄຳຕອບທັງໝົດ.
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
ຜົນຕອບແທນ
array ຂອງ headers.
ເບິ່ງ HTTP.req_get_headers()
ນີ້ແມ່ນຮູບແບບຂອງ array ທີ່ສົ່ງຄືນ:
HTTP:res_get_headers()[' '][ ] = " "
local hdr = HTTP:req_get_headers()
hdr["host"][0] = "www.test.com"
hdr["ຍອມຮັບ"][0] = "ສຽງ/ພື້ນຖານ q=1"
hdr["ຍອມຮັບ"][1] = "ສຽງ/*, q=0.2"
hdr["ຍອມຮັບ"][2] = "*.*, q=0.1"
HTTP.req_add_header(http, ຊື່, ມູນຄ່າ)
ຕື່ມໃສ່ຊ່ອງຂໍ້ມູນສ່ວນຫົວ HTTP ໃນຄໍາຮ້ອງຂໍທີ່ມີຊື່ທີ່ລະບຸໄວ້ໃນ "ຊື່" ແລະ
ມູນຄ່າທີ່ຖືກກໍານົດໄວ້ໃນ "ມູນຄ່າ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· ມູນຄ່າ (string) -- ຄ່າສ່ວນຫົວ.
ເບິ່ງ HTTP.res_add_header()
HTTP.res_add_header(http, ຊື່, ມູນຄ່າ)
ຕື່ມໃສ່ຊ່ອງຂໍ້ມູນສ່ວນຫົວ HTTP ໃນການຕອບໂຕ້ທີ່ມີຊື່ທີ່ລະບຸໄວ້ໃນ "ຊື່" ແລະ
ມູນຄ່າທີ່ຖືກກໍານົດໄວ້ໃນ "ມູນຄ່າ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· ມູນຄ່າ (string) -- ຄ່າສ່ວນຫົວ.
ເບິ່ງ HTTP.req_add_header()
HTTP.req_del_header(http, ຊື່)
ເອົາຊ່ອງຂໍ້ມູນສ່ວນຫົວ HTTP ທັງໝົດໃນຄຳຮ້ອງຂໍທີ່ມີຊື່ທີ່ລະບຸໄວ້ໃນ "ຊື່".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
ເບິ່ງ HTTP.res_del_header()
HTTP.res_del_header(http, ຊື່)
ເອົາຊ່ອງຂໍ້ມູນສ່ວນຫົວ HTTP ທັງໝົດໃນຄຳຕອບທີ່ລະບຸໄວ້ໃນ "ຊື່".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
ເບິ່ງ HTTP.req_del_header()
HTTP.req_set_header(http, ຊື່, ມູນຄ່າ)
ຕົວແປນີ້ປ່ຽນແທນການເກີດຂຶ້ນທັງໝົດຂອງຫົວຂໍ້ "ຊື່", ໂດຍມີພຽງອັນດຽວເທົ່ານັ້ນ
"ມູນຄ່າ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· ມູນຄ່າ (string) -- ຄ່າສ່ວນຫົວ.
ເບິ່ງ HTTP.res_set_header()
ຟັງຊັນນີ້ເຮັດວຽກຄືກັນກັບລະຫັດດັ່ງຕໍ່ໄປນີ້:
ຟັງຊັນ fcn(txn)
TXN.http:req_del_header("header")
TXN.http:req_add_header("header", "value")
ໃນຕອນທ້າຍ
HTTP.res_set_header(http, ຊື່, ມູນຄ່າ)
ຕົວແປນີ້ປ່ຽນແທນການເກີດຂຶ້ນທັງໝົດຂອງຫົວຂໍ້ "ຊື່", ໂດຍມີພຽງອັນດຽວເທົ່ານັ້ນ
"ມູນຄ່າ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· ມູນຄ່າ (string) -- ຄ່າສ່ວນຫົວ.
ເບິ່ງ HTTP.req_rep_header()
HTTP.req_rep_header(http, ຊື່, regex, ແທນທີ່)
ກົງກັບການສະແດງຜົນປົກກະຕິໃນທຸກການປະກົດຕົວຂອງພາກສ່ວນຫົວ "ຊື່" ຕາມ
ກັບ "regex", ແລະແທນທີ່ພວກມັນດ້ວຍການໂຕ້ຖຽງ "ແທນທີ່". ມູນຄ່າການທົດແທນ
ສາມາດບັນຈຸຂໍ້ມູນອ້າງອີງເຊັ່ນ: 1, 2, ... ຟັງຊັນນີ້ເຮັດວຽກກັບຄໍາຮ້ອງຂໍ.
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· regex (string) -- ການຈັບຄູ່ການສະແດງອອກປົກກະຕິ.
· ທົດແທນ (string) -- ຄ່າທົດແທນ.
ເບິ່ງ HTTP.res_rep_header()
HTTP.res_rep_header(http, ຊື່, regex, ສະຕຣິງ)
ກົງກັບການສະແດງຜົນປົກກະຕິໃນທຸກການປະກົດຕົວຂອງພາກສ່ວນຫົວ "ຊື່" ຕາມ
ກັບ "regex", ແລະແທນທີ່ພວກມັນດ້ວຍການໂຕ້ຖຽງ "ແທນທີ່". ມູນຄ່າການທົດແທນ
ສາມາດບັນຈຸຂໍ້ມູນອ້າງອີງເຊັ່ນ: 1, 2, ... ຟັງຊັນນີ້ເຮັດວຽກກັບຄໍາຮ້ອງຂໍ.
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· regex (string) -- ການຈັບຄູ່ການສະແດງອອກປົກກະຕິ.
· ທົດແທນ (string) -- ຄ່າທົດແທນ.
ເບິ່ງ HTTP.req_replace_header()
HTTP.req_replace_value(http, ຊື່, regex, ແທນທີ່)
ເຮັດວຽກຄືກັບ "HTTP.req_replace_header()" ຍົກເວັ້ນວ່າມັນກົງກັບ regex ຕໍ່ກັບ
ທຸກໆຄ່າທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດຂອງຊ່ອງສ່ວນຫົວ "ຊື່" ແທນຄ່າທັງໝົດ
header
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· regex (string) -- ການຈັບຄູ່ການສະແດງອອກປົກກະຕິ.
· ທົດແທນ (string) -- ຄ່າທົດແທນ.
ເບິ່ງ HTTP.req_replace_header()
ເບິ່ງ HTTP.res_replace_value()
HTTP.res_replace_value(http, ຊື່, regex, ແທນທີ່)
ເຮັດວຽກຄືກັບ "HTTP.res_replace_header()" ຍົກເວັ້ນວ່າມັນກົງກັບ regex ຕໍ່ກັບ
ທຸກໆຄ່າທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດຂອງຊ່ອງສ່ວນຫົວ "ຊື່" ແທນຄ່າທັງໝົດ
header
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ຊື່ (string) -- ຊື່ຫົວ.
· regex (string) -- ການຈັບຄູ່ການສະແດງອອກປົກກະຕິ.
· ທົດແທນ (string) -- ຄ່າທົດແທນ.
ເບິ່ງ HTTP.res_replace_header()
ເບິ່ງ HTTP.req_replace_value()
HTTP.req_set_method(http, ວິທີການ)
ຂຽນວິທີການຮ້ອງຂໍຄືນໃຫມ່ດ້ວຍພາລາມິເຕີ "ວິທີການ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ວິທີການ (string) -- ວິທີການໃຫມ່.
HTTP.req_set_path(http, ເສັ້ນທາງ)
ຂຽນເສັ້ນທາງການຮ້ອງຂໍຄືນໃຫມ່ດ້ວຍພາລາມິເຕີ "ເສັ້ນທາງ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ເສັ້ນທາງ (string) -- ເສັ້ນທາງໃຫມ່.
HTTP.req_set_query(http, ສອບຖາມ)
ຂຽນຄືນ string query ຂອງຄໍາຮ້ອງຂໍທີ່ປາກົດຫຼັງຈາກເຄື່ອງຫມາຍຄໍາຖາມທໍາອິດ
("?") ກັບພາລາມິເຕີ "ສອບຖາມ".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· query (string) -- ຄໍາຖາມໃຫມ່.
HTTP.req_set_uri(http, uri)
ຂຽນຄືນຄໍາຮ້ອງຂໍ URI ດ້ວຍພາລາມິເຕີ "uri".
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ປະເພດ (string) -- uri ໃຫມ່.
HTTP.res_set_status(http, ສະຖານະພາບ)
ຂຽນລະຫັດສະຖານະການຕອບສະຫນອງຄືນໃຫມ່ດ້ວຍພາລາມິເຕີ "ລະຫັດ". ໃຫ້ສັງເກດວ່າເຫດຜົນ
ຖືກດັດແປງໂດຍອັດຕະໂນມັດກັບລະຫັດໃຫມ່.
Arguments
· http (class_http) -- ວັດຖຸ http ທີ່ກ່ຽວຂ້ອງ.
· ສະຖານະພາບ (integer) -- ລະຫັດສະຖານະການຕອບສະໜອງໃໝ່.
ລະດັບ TXN()
ຊັ້ນ txn ມີຫນ້າທີ່ທັງຫມົດທີ່ກ່ຽວຂ້ອງກັບການເຮັດທຸລະກໍາ http ຫຼື tcp
(ຫມາຍເຫດກວ່າ tcp stream ແມ່ນຄືກັນກັບການເຮັດທຸລະກໍາ tcp, ແຕ່ການເຮັດທຸລະກໍາ HTTP
ແມ່ນບໍ່ຄືກັນກ່ວາ tcp stream).
ການນໍາໃຊ້ຂອງຫ້ອງຮຽນນີ້ອະນຸຍາດໃຫ້ດຶງຂໍ້ມູນຈາກການຮ້ອງຂໍ, ປ່ຽນແປງມັນແລະ
ສົ່ງຕໍ່ມັນ.
ຟັງຊັນທັງໝົດທີ່ໃຫ້ໂດຍຫ້ອງຮຽນນີ້ແມ່ນມີຢູ່ໃນບໍລິບົດ
ຕົວຢ່າງ - ດຶງຂໍ້ມູນ ແລະ ຫຸ້ນ.
TXN.c
ຜົນຕອບແທນ
An Converters ລະດັບ.
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters.
TXN.sc
ຜົນຕອບແທນ
An Converters ລະດັບ.
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters. ຫນ້າທີ່ຂອງວັດຖຸນີ້
ຕອບສະຕຣິງສະເໝີ.
TXN.f
ຜົນຕອບແທນ
An ດຶງຂໍ້ມູນ ລະດັບ.
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches.
TXN.sf
ຜົນຕອບແທນ
An ດຶງຂໍ້ມູນ ລະດັບ.
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches. ຫນ້າທີ່ຂອງວັດຖຸນີ້
ຕອບສະຕຣິງສະເໝີ.
TXN.req
ຜົນຕອບແທນ
An Channel ລະດັບ.
ຄຸນລັກສະນະນີ້ປະກອບມີວັດຖຸຊັ້ນຊ່ອງສໍາລັບ buffer ການຮ້ອງຂໍ.
TXN.res
ຜົນຕອບແທນ
An Channel ລະດັບ.
ຄຸນລັກສະນະນີ້ປະກອບດ້ວຍວັດຖຸລະດັບຊ່ອງສໍາລັບ buffer ຕອບສະຫນອງ.
TXN.http
ຜົນຕອບແທນ
An HTTP ລະດັບ.
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ HTTP. ມັນສາມາດໃຊ້ໄດ້ພຽງແຕ່ຖ້າຕົວແທນມີ
"ໂຫມດ http" ຖືກເປີດໃຊ້.
TXN.log(TXN, ລະດັບບັນທຶກ, ຂໍ້ຄວາມ)
ຟັງຊັນນີ້ສົ່ງບັນທຶກ. ບັນທຶກຖືກສົ່ງ, ອີງຕາມ HAProxy
ໄຟລ໌ການຕັ້ງຄ່າ, ຢູ່ໃນເຄື່ອງແມ່ຂ່າຍ syslog ເລີ່ມຕົ້ນຖ້າມັນຖືກຕັ້ງຄ່າແລະຢູ່ໃນ
stderr ຖ້າມັນຖືກອະນຸຍາດ.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· loglevel (integer) -- ລະດັບບັນທຶກທີ່ກ່ຽວຂ້ອງກັບຂໍ້ຄວາມ. ມັນເປັນ
ຕົວເລກລະຫວ່າງ 0 ຫາ 7.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ 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 (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ TXN.log
TXN.Debug(txn, ຂໍ້ຄວາມ)
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ TXN.log
ເຮັດວຽກດຽວກັນກັບ:
function Debug(txn, msg)
TXN.log(txn, core.debug, msg)
ໃນຕອນທ້າຍ
TXN.Info(txn, ຂໍ້ຄວາມ)
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ TXN.log
function Debug(txn, msg)
TXN.log(txn, core.info, msg)
ໃນຕອນທ້າຍ
TXN.ຄຳເຕືອນ(txn, ຂໍ້ຄວາມ)
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ TXN.log
function Debug(txn, msg)
TXN.log(txn, core.warning, msg)
ໃນຕອນທ້າຍ
TXN.Alert(txn, ຂໍ້ຄວາມ)
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· msg (string) -- ເນື້ອໃນບັນທຶກ.
ເບິ່ງ TXN.log
function Debug(txn, msg)
TXN.log(txn, core.alert, msg)
ໃນຕອນທ້າຍ
TXN.get_priv(txn)
ສົ່ງຄືນຂໍ້ມູນ Lua ທີ່ເກັບໄວ້ໃນທຸລະກໍາປະຈຸບັນ (ກັບ TXN.set_priv())
ຫນ້າທີ່. ຖ້າບໍ່ມີຂໍ້ມູນຖືກເກັບໄວ້, ມັນຈະສົ່ງຄ່າ nil.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
ຜົນຕອບແທນ
ຂໍ້ມູນ opaque ເກັບໄວ້ກ່ອນຫນ້ານີ້, ຫຼືບໍ່ມີຖ້າຫາກວ່າບໍ່ມີຫຍັງມີ.
TXN.set_priv(txn, ຂໍ້ມູນ)
ເກັບຮັກສາຂໍ້ມູນໃດໆໃນທຸລະກໍາ HAProxy ໃນປັດຈຸບັນ. ການປະຕິບັດນີ້ແທນທີ່ເກົ່າ
ຂໍ້ມູນເກັບຮັກສາໄວ້.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· ຂໍ້ມູນ (opaque) -- ຂໍ້ມູນທີ່ຖືກເກັບໄວ້ໃນທຸລະກໍາ.
TXN.set_var(TXN, ມີ, ມູນຄ່າ)
ປ່ຽນປະເພດ Lua ໃນປະເພດ HAProxy ແລະເກັບຮັກສາມັນໄວ້ໃນຕົວແປ .
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· var (string) -- ຊື່ຕົວແປຕາມຕົວແປ HAProxy
syntax
· ມູນຄ່າ (opaque) -- ຂໍ້ມູນທີ່ຖືກເກັບໄວ້ໃນຕົວແປ.
TXN.get_var(TXN, var)
ສົ່ງຄືນຂໍ້ມູນທີ່ເກັບໄວ້ໃນຕົວປ່ຽນຕົວແປ ໃນປະເພດ Lua.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· var (string) -- ຊື່ຕົວແປຕາມຕົວແປ HAProxy
syntax
TXN.get_headers(txn)
ຟັງຊັນນີ້ສົ່ງຄືນອາເຣຂອງສ່ວນຫົວ.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
ຜົນຕອບແທນ
array ຂອງ headers ເປັນ.
TXN.done(txn)
ຟັງຊັນນີ້ຢຸດການປະມວນຜົນທຸລະກໍາແລະເຊດຊັນທີ່ກ່ຽວຂ້ອງ.
ມັນສາມາດຖືກນໍາໃຊ້ໃນເວລາທີ່ມີຄວາມຜິດພາດທີ່ສໍາຄັນຖືກກວດພົບຫຼືເພື່ອຢຸດການປຸງແຕ່ງພາຍຫຼັງ
ຂໍ້ມູນບາງຢ່າງໄດ້ຖືກສົ່ງຄືນໃຫ້ລູກຄ້າ (ເຊັ່ນ: ການປ່ຽນເສັ້ນທາງ).
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
TXN.set_loglevel(txn, ລະດັບບັນທຶກ)
ຖືກນໍາໃຊ້ເພື່ອປ່ຽນລະດັບບັນທຶກຂອງຄໍາຮ້ອງຂໍໃນປະຈຸບັນ. "loglevel" ຕ້ອງເປັນ
ຈຳນວນເຕັມລະຫວ່າງ 0 ແລະ 7.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· loglevel (integer) -- ລະດັບບັນທຶກທີ່ຕ້ອງການ. ຕົວແປນີ້ສາມາດເປັນຫນຶ່ງໃນ
ເບິ່ງ ຫຼັກ.
TXN.set_tos(txn, ຖິ້ມ)
ຖືກນໍາໃຊ້ເພື່ອກໍານົດຄ່າພາກສະຫນາມ TOS ຫຼື DSCP ຂອງແພັກເກັດທີ່ສົ່ງໃຫ້ລູກຄ້າໄປຫາ
ຄ່າຜ່ານ "tos" ໃນເວທີທີ່ສະຫນັບສະຫນູນນີ້.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· tos (integer) -- TOS os DSCP ໃຫມ່.
TXN.set_mark(txn, ເຄື່ອງໝາຍ)
ຖືກນໍາໃຊ້ເພື່ອກໍານົດ Netfilter MARK ໃນແພັກເກັດທັງຫມົດທີ່ສົ່ງໃຫ້ລູກຄ້າເປັນມູນຄ່າ
ຜ່ານ "ເຄື່ອງຫມາຍ" ໃນເວທີທີ່ສະຫນັບສະຫນູນມັນ.
Arguments
· txn (class_txn) -- class txn object ທີ່ມີຂໍ້ມູນ.
· ເຄື່ອງຫມາຍ (integer) -- ຄ່າເຄື່ອງໝາຍ.
ລະດັບ ເຕົ້າສຽບ()
ຫ້ອງຮຽນນີ້ຕ້ອງເຂົ້າກັນໄດ້ກັບຫ້ອງຮຽນ Lua Socket. ພຽງແຕ່ 'ລູກຄ້າ'
ຫນ້າທີ່ສາມາດໃຊ້ໄດ້. ເບິ່ງເອກະສານ Lua Socket:
http://w3.impa.br/~diego/software/luasocket/tcp.html
ເຕົ້າຮັບ.ປິດ(socket)
ປິດວັດຖຸ TCP. ເຕົ້າຮັບພາຍໃນທີ່ໃຊ້ໂດຍວັດຖຸແມ່ນປິດແລະທ້ອງຖິ່ນ
ທີ່ຢູ່ທີ່ວັດຖຸຖືກຜູກມັດແມ່ນມີໃຫ້ກັບຄໍາຮ້ອງສະຫມັກອື່ນໆ. ບໍ່
ການດໍາເນີນງານເພີ່ມເຕີມ (ຍົກເວັ້ນສໍາລັບການເພີ່ມເຕີມໂທຫາວິທີການທີ່ໃກ້ຊິດ) ແມ່ນອະນຸຍາດໃຫ້ໃນ a
ປິດ Socket.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
ຫມາຍເຫດ: ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະປິດເຕົ້າສຽບທີ່ໃຊ້ແລ້ວທັງຫມົດເມື່ອພວກເຂົາບໍ່ຈໍາເປັນ, ນັບຕັ້ງແຕ່, ໃນ
ຫຼາຍລະບົບ, ແຕ່ລະຊັອກເກັດໃຊ້ຕົວອະທິບາຍໄຟລ໌, ເຊິ່ງເປັນລະບົບຈໍາກັດ
ຊັບພະຍາກອນ. ສິ່ງຂອງທີ່ເກັບຂີ້ເຫຍື້ອແມ່ນປິດອັດຕະໂນມັດກ່ອນທີ່ຈະທໍາລາຍ,
ເຖິງແມ່ນວ່າ.
Socket.connect(ເຕົ້າຮັບ, ທີ່ຢູ່[, ທ່າເຮືອ])
ພະຍາຍາມເຊື່ອມຕໍ່ວັດຖຸຊັອກເກັດກັບແມ່ຂ່າຍທາງໄກ.
ໃນກໍລະນີທີ່ມີຄວາມຜິດພາດ, ວິທີການກັບຄືນມາ nil ປະຕິບັດຕາມດ້ວຍສະຕຣິງອະທິບາຍຄວາມຜິດພາດໄດ້.
ໃນກໍລະນີຂອງຄວາມສໍາເລັດ, ວິທີການກັບຄືນມາ 1.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
· ທີ່ຢູ່ (string) -- ສາມາດເປັນທີ່ຢູ່ IP ຫຼືຊື່ເຈົ້າພາບ. ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບ
ຂໍ້ມູນເພີ່ມເຕີມ
· port (integer) -- ຕ້ອງເປັນຈໍານວນເຕັມໃນໄລຍະ [1..64K].
ຜົນຕອບແທນ
1 ຫຼື nil.
ການຂະຫຍາຍພາກສະຫນາມທີ່ຢູ່ອະນຸຍາດໃຫ້ນໍາໃຊ້ຫນ້າທີ່ເຊື່ອມຕໍ່ () ເພື່ອເຊື່ອມຕໍ່ກັບ
ກະແສອື່ນໆທີ່ບໍ່ແມ່ນ TCP. syntax ທີ່ມີທີ່ຢູ່ simpleipv4 ຫຼື ipv6 ແມ່ນ
ໂດຍພື້ນຖານແລ້ວຮູບແບບທີ່ຄາດໄວ້. ຮູບແບບນີ້ຕ້ອງການພອດ.
ຮູບແບບອື່ນໆທີ່ຍອມຮັບແມ່ນເສັ້ນທາງຊັອກເກັດເຊັ່ນ "/socket/path", ມັນອະນຸຍາດໃຫ້ເຊື່ອມຕໍ່
ກັບເຕົ້າຮັບ. namespaces abstract ແມ່ນສະຫນັບສະຫນູນດ້ວຍຄໍານໍາຫນ້າ "abns@", ແລະສຸດທ້າຍ
filedescriotr ສາມາດຜ່ານໄດ້ດ້ວຍຄໍານໍາຫນ້າ "fd@". ຄຳນຳໜ້າ "ipv4@", "ipv6@"
ແລະ "unix@" ຍັງໄດ້ຮັບການສະຫນັບສະຫນູນ. ພອດສາມາດຖືກສົ່ງຜ່ານໃນສະຕຣິງ. syntax
"127.0.0.1:1234" ແມ່ນຖືກຕ້ອງ. ໃນກໍລະນີດັ່ງກ່າວນີ້, ຕົວກໍານົດການ port ຖືກລະເລີຍ.
Socket.connect_ssl(ຊັອກເກັດ, ທີ່ຢູ່, ພອດ)
ພຶດຕິກໍາດຽວກັນກັບຊ່ອງສຽບຟັງຊັນ: ເຊື່ອມຕໍ່, ແຕ່ໃຊ້ SSL.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
ຜົນຕອບແທນ
1 ຫຼື nil.
Socket.getpeername(socket)
ສົ່ງຄືນຂໍ້ມູນກ່ຽວກັບດ້ານໄກຂອງວັດຖຸລູກຂ່າຍທີ່ເຊື່ອມຕໍ່.
ຕອບສະຕຣິງທີ່ມີທີ່ຢູ່ IP ຂອງຄູ່, ຕາມດ້ວຍໝາຍເລກຜອດນັ້ນ
peer ກໍາລັງໃຊ້ສໍາລັບການເຊື່ອມຕໍ່. ໃນກໍລະນີຂອງຄວາມຜິດພາດ, ວິທີການກັບຄືນມາ nil.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຂໍ້ມູນເຊີບເວີ.
Socket.getsockname(ຊັອກເກັດ)
ສົ່ງຄືນຂໍ້ມູນທີ່ຢູ່ທ້ອງຖິ່ນທີ່ກ່ຽວຂ້ອງກັບວັດຖຸ.
ວິທີການສົ່ງຄືນສະຕຣິງທີ່ມີທີ່ຢູ່ IP ທ້ອງຖິ່ນແລະຕົວເລກທີ່ມີພອດ. ໃນ
ກໍລະນີຂອງຄວາມຜິດພາດ, ວິທີການກັບຄືນມາ nil.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຂໍ້ມູນລູກຄ້າ.
Socket.receive(ເຕົ້າຮັບ[, ຮູບແບບ[, ຄໍານໍາຫນ້າ]])
ອ່ານຂໍ້ມູນຈາກວັດຖຸລູກຄ້າ, ອີງຕາມຮູບແບບການອ່ານທີ່ລະບຸ. ຮູບແບບ
ປະຕິບັດຕາມຮູບແບບ I/O ໄຟລ໌ Lua, ແລະຄວາມແຕກຕ່າງໃນການປະຕິບັດລະຫວ່າງທັງຫມົດ
ຮູບແບບແມ່ນລະເລີຍ.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
· ຮູບແບບ (string|ຈຳນວນເຕັມ) -- ອະທິບາຍສິ່ງທີ່ຕ້ອງການ (ເບິ່ງຂ້າງລຸ່ມນີ້).
· ຄຳ ນຳ ໜ້າ (string) -- ສະຕຣິງທີ່ຈະຖືກນຳໜ້າຂໍ້ມູນທີ່ສົ່ງຄືນມາ.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຂໍ້ມູນທີ່ຕ້ອງການ ຫຼື nil.
ຮູບແບບສາມາດເປັນອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
·
`*a`: reads ຈາກ ໄດ້ socket ຈົນກ່ວາ ໄດ້ ການເຊື່ອມຕໍ່ is ປິດ. No
ການແປພາສາໃນຕອນທ້າຍແມ່ນດໍາເນີນການ;
·
`*l`: reads a ອອນໄລນ໌ of ຂໍ້ຄວາມ ຈາກ ໄດ້ ເຕົ້າຮັບ. ໄດ້ ອອນໄລນ໌ is ສິ້ນສຸດລົງ by a
ຕົວອັກສອນ LF (ASCII 10), ເປັນທາງເລືອກກ່ອນໂດຍຕົວອັກສອນ CR (ASCII 13).
ຕົວອັກສອນ CR ແລະ LF ບໍ່ໄດ້ລວມຢູ່ໃນແຖວທີ່ສົ່ງຄືນ. ໃນຄວາມເປັນຈິງ,
ຕົວອັກສອນ CR ທັງໝົດຖືກລະເລີຍໂດຍຮູບແບບ. ນີ້ແມ່ນຮູບແບບເລີ່ມຕົ້ນ.
·
ຈໍານວນ: ສາເຫດ ໄດ້ ວິທີການ to ອ່ານ a ລະບຸ ຈໍານວນ of ໄບ ຈາກ ໄດ້
ເຕົ້າຮັບ. ຄໍານໍາຫນ້າແມ່ນສະຕຣິງທາງເລືອກທີ່ຈະໄດ້ຮັບການ concatenated ກັບຈຸດເລີ່ມຕົ້ນ
ຂອງຂໍ້ມູນທີ່ໄດ້ຮັບກ່ອນທີ່ຈະກັບຄືນມາ.
· ຫວ່າງເປົ່າ: ຖ້າຮູບແບບຖືກປະໄວ້ຫວ່າງເປົ່າ, ທາງເລືອກເລີ່ມຕົ້ນແມ່ນ *l.
ຖ້າປະສົບຜົນສໍາເລັດ, ວິທີການສົ່ງຄືນຮູບແບບທີ່ໄດ້ຮັບ. ໃນກໍລະນີຂອງຄວາມຜິດພາດ, ໄດ້
ວິທີການສົ່ງຄືນ nil ຕິດຕາມດ້ວຍຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ສາມາດເປັນ string 'ປິດ' ໃນ
ກໍລະນີທີ່ການເຊື່ອມຕໍ່ໄດ້ຖືກປິດກ່ອນທີ່ຈະສໍາເລັດການສາຍສົ່ງຫຼືສາຍ
'ຫມົດເວລາ' ໃນກໍລະນີທີ່ມີການຫມົດເວລາໃນລະຫວ່າງການປະຕິບັດງານ. ນອກຈາກນີ້, ຫຼັງຈາກຄວາມຜິດພາດ
ຂໍ້ຄວາມ, ຟັງຊັນສົ່ງຄືນຜົນໄດ້ຮັບບາງສ່ວນຂອງການສົ່ງຕໍ່.
ຫມາຍເຫດສໍາຄັນ: ຟັງຊັນນີ້ມີການປ່ຽນແປງຢ່າງຮຸນແຮງ. ມັນໃຊ້ເພື່ອສະຫນັບສະຫນູນຫຼາຍ
ຮູບແບບ (ແຕ່ຂ້າພະເຈົ້າບໍ່ເຄີຍເຫັນຄຸນສົມບັດນີ້ນໍາໃຊ້) ແລະໃນປັດຈຸບັນມັນບໍ່ມີອີກແລ້ວ.
ຜົນໄດ້ຮັບບາງສ່ວນທີ່ຖືກນໍາໃຊ້ເພື່ອກັບຄືນໃນລັກສະນະດຽວກັນກັບຜົນໄດ້ຮັບທີ່ປະສົບຜົນສໍາເລັດ. ນີ້
ຄຸນສົມບັດສຸດທ້າຍໄດ້ລະເມີດແນວຄວາມຄິດທີ່ຟັງຊັນທັງໝົດຄວນກັບຄືນມາບໍ່ມີຂໍ້ຜິດພາດ. ດັ່ງນັ້ນ
ມັນມີການປ່ຽນແປງຄືກັນ.
Socket.send(ເຕົ້າຮັບ, ຂໍ້ມູນ[, ເລີ່ມ[, ສິ້ນສຸດ]])
ສົ່ງຂໍ້ມູນຜ່ານວັດຖຸລູກຄ້າ.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
· ຂໍ້ມູນ (string) -- ຂໍ້ມູນທີ່ຈະຖືກສົ່ງໄປ.
· ການເລີ່ມຕົ້ນ (integer) -- ຕໍາແຫນ່ງເລີ່ມຕົ້ນໃນ buffer ຂອງຂໍ້ມູນທີ່ຈະ
ຖືກສົ່ງ.
· ໃນຕອນທ້າຍ (integer) -- ຕໍາແໜ່ງສິ້ນສຸດໃນ buffer ຂອງຂໍ້ມູນທີ່ຈະເປັນ
ສົ່ງແລ້ວ.
ຜົນຕອບແທນ
ເບິ່ງຂ້າງລຸ່ມນີ້.
ຂໍ້ມູນແມ່ນສະຕຣິງທີ່ຈະສົ່ງ. ການໂຕ້ຖຽງທາງເລືອກ i ແລະ j ເຮັດວຽກຄືກັບ
ຟັງຊັນ string.sub Lua ມາດຕະຖານເພື່ອອະນຸຍາດໃຫ້ເລືອກສະຕຣິງຍ່ອຍທີ່ຖືກສົ່ງໄປ.
ຖ້າປະສົບຜົນສໍາເລັດ, ວິທີການສົ່ງຄືນດັດຊະນີຂອງ byte ສຸດທ້າຍພາຍໃນ [ເລີ່ມຕົ້ນ, ສິ້ນສຸດ]
ທີ່ໄດ້ຖືກສົ່ງໄປ. ສັງເກດເຫັນວ່າ, ຖ້າເລີ່ມຕົ້ນແມ່ນ 1 ຫຼືບໍ່ມີ, ນີ້ແມ່ນປະສິດທິຜົນ
ຈໍານວນທັງຫມົດຂອງ bytes ສົ່ງ. ໃນກໍລະນີຂອງຄວາມຜິດພາດ, ວິທີການກັບຄືນມາ nil, ປະຕິບັດຕາມໂດຍ
ຂໍ້ຄວາມຜິດພາດ, ປະຕິບັດຕາມໂດຍດັດຊະນີຂອງ byte ສຸດທ້າຍພາຍໃນ [ເລີ່ມຕົ້ນ, ທ້າຍ] ວ່າ
ໄດ້ຖືກສົ່ງໄປແລ້ວ. ທ່ານອາດຈະຕ້ອງການພະຍາຍາມອີກເທື່ອຫນຶ່ງຈາກ byte ດັ່ງຕໍ່ໄປນີ້. ຄວາມຜິດພາດ
ຂໍ້ຄວາມສາມາດ 'ປິດ' ໃນກໍລະນີທີ່ການເຊື່ອມຕໍ່ຖືກປິດກ່ອນທີ່ຈະສົ່ງ
ໄດ້ສໍາເລັດຫຼື string 'ຫມົດເວລາ' ໃນກໍລະນີທີ່ມີການຫມົດເວລາໃນລະຫວ່າງ
ການປະຕິບັດງານ.
ຫມາຍເຫດ: ຜົນຜະລິດແມ່ນບໍ່ໄດ້ buffed. ສໍາລັບສາຍຂະຫນາດນ້ອຍ, ມັນແມ່ນສະເຫມີໄປທີ່ດີກວ່າທີ່ຈະ concatenate
ເຂົາເຈົ້າຢູ່ໃນ Lua (ກັບ '..' ປະຕິບັດການ) ແລະສົ່ງຜົນໄດ້ຮັບໃນຫນຶ່ງໂທແທນທີ່ຈະເປັນ
ໂທຫາວິທີການຫຼາຍຄັ້ງ.
Socket.setoption(ເຕົ້າຮັບ, ທາງເລືອກ[, ມູນຄ່າ])
ພຽງແຕ່ປະຕິບັດເພື່ອຄວາມເຂົ້າກັນໄດ້, cal ນີ້ບໍ່ມີຫຍັງ.
socket.settimeout(ເຕົ້າຮັບ, ຄ່າ[, ໂໝດ])
ປ່ຽນຄ່າການໝົດເວລາຂອງວັດຖຸ. ການປະຕິບັດການ I/O ທັງໝົດແມ່ນຖືກປິດກັ້ນ. ນັ້ນ
ແມ່ນ, ການໂທຫາວິທີການສົ່ງ, ຮັບ, ແລະຍອມຮັບຈະປິດກັ້ນບໍ່ມີກໍານົດ,
ຈົນກ່ວາການດໍາເນີນງານສໍາເລັດ. ວິທີການ settimeout ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຈໍານວນ
ຂອງທີ່ໃຊ້ເວລາວິທີການ I / O ສາມາດຕັນ. ເມື່ອເວລາຫມົດເວລາໄດ້ຜ່ານໄປ, ຜົນກະທົບ
ວິທີການໃຫ້ເຖິງແລະລົ້ມເຫລວກັບລະຫັດຄວາມຜິດພາດ.
ໄລຍະເວລາລໍຖ້າແມ່ນລະບຸເປັນຄ່າຕົວກໍານົດການ, ເປັນວິນາທີ.
ໂຫມດເວລາຫມົດເວລາແມ່ນຖືກປະຕິບັດ bot, ການຫມົດເວລາທີ່ກໍານົດໄວ້ພຽງແຕ່ແມ່ນບໍ່ມີການເຄື່ອນໄຫວ
ເວລາລໍຖ້າໃຫ້ສໍາເລັດການສົ່ງ buffer ພາຍໃນຫຼືລໍຖ້າການຮັບຂໍ້ມູນ.
Arguments
· socket (class_socket) -- ແມ່ນ Socket ການຈັດການ.
· ມູນຄ່າ (integer) -- ຄ່າເວລາໝົດເວລາ.
ລະດັບ ແຜນທີ່()
ຫ້ອງຮຽນນີ້ອະນຸຍາດໃຫ້ຊອກຫາບາງອັນໃນແຜນທີ່ HAProxy. ແຜນທີ່ປະກາດສາມາດເປັນ
ແກ້ໄຂໃນລະຫວ່າງການແລ່ນຜ່ານຊັອກເກັດການຈັດການ HAProxy.
default = "usa"
-- ສ້າງ ແລະໂຫຼດແຜນທີ່
geo = Map.new("geo.map", Map.ip);
-- ສ້າງ fetch ໃຫມ່ທີ່ສົ່ງຄືນປະເທດຜູ້ໃຊ້
core.register_fetches("ປະເທດ", ຟັງຊັນ(txn)
src ທ້ອງຖິ່ນ;
ທ້ອງຖິ່ນ;
src = txn.f:fhdr("x-forwarded-for");
ຖ້າ (src == nil) ຫຼັງຈາກນັ້ນ
src = txn.f:src()
ຖ້າ (src == nil) ຫຼັງຈາກນັ້ນ
ກັບຄືນຄ່າເລີ່ມຕົ້ນ;
ໃນຕອນທ້າຍ
ໃນຕອນທ້າຍ
-- ດໍາເນີນການຊອກຫາ
loc = geo:lookup(src);
ຖ້າ (loc == nil) ແລ້ວ
ກັບຄືນຄ່າເລີ່ມຕົ້ນ;
ໃນຕອນທ້າຍ
ກັບຄືນສະຖານທີ່;
ສິ້ນສຸດ);
Map.int
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.ip ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.str
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.beg
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.sub
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.dir
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.dom
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.end
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.reg
ເບິ່ງໄຟລ໌ HAProxy configuration.txt, ບົດ "ການໃຊ້ ACLs ແລະການດຶງເອົາຕົວຢ່າງ"
ບົດຍ່ອຍ "ພື້ນຖານ ACL" ເພື່ອເຂົ້າໃຈວິທີການຈັບຄູ່ຮູບແບບນີ້.
Map.new(ໄຟລ໌, ວິທີການ)
ສ້າງ ແລະໂຫຼດແຜນທີ່.
Arguments
· ເອກະສານ (string) -- ໄຟລ໌ທີ່ປະກອບດ້ວຍແຜນທີ່.
· ວິທີການ (integer) -- ແມ່ນວິທີການຈັບຄູ່ຮູບແບບແຜນທີ່. ເບິ່ງຄຸນລັກສະນະ
ຂອງຫ້ອງຮຽນແຜນທີ່.
ຜົນຕອບແທນ
ວັດຖຸແຜນທີ່ຫ້ອງຮຽນ.
ເບິ່ງ ຄຸນລັກສະນະຂອງແຜນທີ່.
Map.lookup(ແຜນທີ່, str)
ດໍາເນີນການຊອກຫາຢູ່ໃນແຜນທີ່.
Arguments
· ແຜນທີ່ (class_map) -- ແມ່ນ class Map object.
· str (string) -- ສະຕຣິງທີ່ໃຊ້ເປັນກະແຈ.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຜົນໄດ້ຮັບ ຫຼື nil ຖ້າບໍ່ກົງກັນ.
Map.slookup(ແຜນທີ່, str)
ດໍາເນີນການຊອກຫາຢູ່ໃນແຜນທີ່.
Arguments
· ແຜນທີ່ (class_map) -- ແມ່ນ class Map object.
· str (string) -- ສະຕຣິງທີ່ໃຊ້ເປັນກະແຈ.
ຜົນຕອບແທນ
ສະຕຣິງທີ່ມີຜົນໄດ້ຮັບ ຫຼືສະຕຣິງຫວ່າງເປົ່າ ຖ້າບໍ່ກົງກັນ.
ລະດັບ AppleTTP()
ຫ້ອງຮຽນນີ້ແມ່ນໃຊ້ກັບແອັບເປິ້ນທີ່ຕ້ອງການໂໝດ 'http'. http applet ສາມາດ
ໄດ້ລົງທະບຽນກັບ core.register_service() ຫນ້າທີ່. ພວກເຂົາເຈົ້າໄດ້ຖືກນໍາໃຊ້ສໍາລັບ
ປະມວນຜົນການຮ້ອງຂໍ http ຄືກັບເຄື່ອງແມ່ຂ່າຍທີ່ຢູ່ດ້ານຫຼັງຂອງ HAProxy.
ນີ້ແມ່ນລະຫັດຕົວຢ່າງສະບາຍດີໂລກ:
core.register_service("hello-world", "http", function(applet)
local response = "ສະບາຍດີໂລກ !"
ແອັບເປິ້ນ:set_status(200)
applet:add_header("ຄວາມຍາວຂອງເນື້ອຫາ", string.len(ຕອບສະຫນອງ))
applet:add_header("ປະເພດເນື້ອຫາ", "ຂໍ້ຄວາມ/ທຳມະດາ")
applet:start_response()
applet: ສົ່ງ (ຕອບສະຫນອງ)
ສຸດທ້າຍ)
AppleTTP.c
ຜົນຕອບແທນ
A Converters ລະດັບ
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters.
AppleTTP.sc
ຜົນຕອບແທນ
A Converters ລະດັບ
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters. ຫນ້າທີ່ຂອງວັດຖຸນີ້
ຕອບສະຕຣິງສະເໝີ.
AppletTHTP.f
ຜົນຕອບແທນ
A ດຶງຂໍ້ມູນ ລະດັບ
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches. ໃຫ້ສັງເກດວ່າການປະຕິບັດ applet
ສະຖານທີ່ບໍ່ສາມາດເຂົ້າເຖິງທຸລະກໍາ HTTP ຫຼັກ HAProxy ທີ່ຖືກຕ້ອງ, ດັ່ງນັ້ນບາງຕົວຢ່າງ
fecthes ທີ່ກ່ຽວຂ້ອງກັບຄ່າ HTTP ຂຶ້ນກັບ (hdr, path, ... ) ບໍ່ສາມາດໃຊ້ໄດ້.
AppleTTP.sf
ຜົນຕອບແທນ
A ດຶງຂໍ້ມູນ ລະດັບ
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches. ຫນ້າທີ່ຂອງວັດຖຸນີ້
ຕອບສະຕຣິງສະເໝີ. ໃຫ້ສັງເກດວ່າສະຖານທີ່ປະຕິບັດ applet ບໍ່ສາມາດເຂົ້າເຖິງ a
ການເຮັດທຸລະກໍາ HTTP ຫຼັກ HAProxy ທີ່ຖືກຕ້ອງ, ດັ່ງນັ້ນບາງຕົວຢ່າງທີ່ກ່ຽວຂ້ອງກັບ HTTP
ຄ່າທີ່ຂຶ້ນກັບ (hdr, path, ...) ບໍ່ມີໃຫ້.
AppletTP.method
ຜົນຕອບແທນ
string
ວິທີການຄຸນລັກສະນະສົ່ງຄືນສະຕຣິງທີ່ມີວິທີການ HTTP.
AppletTP.version
ຜົນຕອບແທນ
string
ສະບັບ attribute, ຕອບສະຕຣິງທີ່ມີສະບັບຮ້ອງຂໍ HTTP.
AppletTP.path
ຜົນຕອບແທນ
string
ເສັ້ນທາງຄຸນລັກສະນະສົ່ງຄືນສະຕຣິງທີ່ມີເສັ້ນທາງການຮ້ອງຂໍ HTTP.
AppletTP.qs
ຜົນຕອບແທນ
string
ຄຸນລັກສະນະ qs ຕອບສະຕຣິງທີ່ມີສາຍຄຳຮ້ອງຂໍ HTTP.
AppletTP.length
ຜົນຕອບແທນ
integer
ຄວາມຍາວຂອງຄຸນລັກສະນະສົ່ງຄືນຈໍານວນເຕັມທີ່ປະກອບດ້ວຍຄວາມຍາວຂອງ HTTP.
AppletTP.headers
ຜົນຕອບແທນ
array
ສ່ວນຫົວຄຸນລັກສະນະສົ່ງຄືນອາເຣທີ່ມີສ່ວນຫົວ HTTP. ສ່ວນຫົວ
ຊື່ແມ່ນສະເຫມີຢູ່ໃນຕົວພິມນ້ອຍ. ໃນຖານະເປັນຊື່ຫົວສາມາດພົບຫຼາຍກ່ວາ
ເມື່ອແຕ່ລະຄໍາຮ້ອງຂໍ, ມູນຄ່າຖືກດັດສະນີດ້ວຍ 0 ເປັນມູນຄ່າດັດສະນີທໍາອິດ. ອາເຣ
ມີແບບຟອມນີ້:
AppletTP.headers[' '][ ] = " "
AppletHTTP.headers["host"][0] = "www.test.com"
AppletHTTP.headers["ຍອມຮັບ"][0] = "ສຽງ/ພື້ນຖານ q=1"
AppletHTTP.headers["ຍອມຮັບ"][1] = "ສຽງ/*, q=0.2"
AppletHTTP.headers["ຍອມຮັບ"][2] = "*/*, q=0.1"
AppletTP.headers
ປະກອບມີອາເຣທີ່ມີສ່ວນຫົວຄຳຮ້ອງຂໍທັງໝົດ.
AppletTHTP.set_status(applet, ລະຫັດ)
ຟັງຊັນນີ້ກໍານົດລະຫັດສະຖານະ HTTP ສໍາລັບການຕອບສະຫນອງ. ລະຫັດທີ່ອະນຸຍາດແມ່ນມາຈາກ
100 ເຖິງ 599.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
· ລະຫັດ (integer) -- ລະຫັດສະຖານະສົ່ງຄືນໃຫ້ລູກຄ້າ.
AppletTHTP.add_header(applet, ຊື່, ມູນຄ່າ)
ຟັງຊັນນີ້ເພີ່ມ header ໃນການຕອບສະຫນອງ. ສ່ວນຫົວທີ່ຊໍ້າກັນບໍ່ໄດ້ຖືກຫຍໍ້ລົງ.
ຫົວຂໍ້ພິເສດ ຄວາມຍາວເນື້ອໃນ ຖືກນໍາໃຊ້ເພື່ອກໍານົດຄວາມຍາວຕອບສະຫນອງ. ຖ້າຫາກວ່າມັນ
ບໍ່ມີຢູ່, ກ ການໂອນເຂົ້າລະຫັດ: ເປັນຕ່ອນ ຖືກກໍານົດ, ແລະການຂຽນທັງຫມົດຈາກຫນ້າທີ່
AppleTTP:send() ກາຍເປັນ chunk.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
· ຊື່ (string) -- ຊື່ຫົວ
· ມູນຄ່າ (string) -- ຄ່າ header
AppletHTTP.start_response(applet)
ຟັງຊັນນີ້ຊີ້ໃຫ້ເຫັນເຖິງເຄື່ອງຈັກ HTTP ວ່າມັນສາມາດປະມວນຜົນແລະສົ່ງ
ຫົວຂໍ້ຕອບສະຫນອງ. ຫຼັງຈາກນີ້ເອີ້ນວ່າພວກເຮົາບໍ່ສາມາດເພີ່ມ headers ໃນການຕອບສະຫນອງ; ພວກເຮົາ
ບໍ່ສາມາດໃຊ້ AppleTTP:send() ຫນ້າທີ່ຖ້າຫາກວ່າ AppleTTP:start_response() ບໍ່ແມ່ນ
ເອີ້ນວ່າ.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
AppletTHTP.getline(applet)
ຟັງຊັນນີ້ສົ່ງຄືນສະຕຣິງທີ່ມີນຶ່ງແຖວຈາກເນື້ອໃນ http. ຖ້າຂໍ້ມູນ
ກັບຄືນມາບໍ່ມີ '\n' ສຸດທ້າຍທີ່ສົມມຸດວ່າຂໍ້ມູນສຸດທ້າຍຂອງມັນ
ກ່ອນສິ້ນສຸດການຖ່າຍທອດ.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
ຜົນຕອບແທນ
ຊ່ອຍແນ່. ສະຕຣິງສາມາດຫວ່າງເປົ່າໄດ້ຖ້າພວກເຮົາໄປຮອດຈຸດສິ້ນສຸດຂອງກະແສ.
AppletHTTP.receive(applet[, ຂະຫນາດ])
ອ່ານຂໍ້ມູນຈາກຮ່າງກາຍ HTTP, ອີງຕາມການອ່ານທີ່ລະບຸ ຂະຫນາດທີ່ຢູ່ ຖ້າຫາກວ່າ ຂະຫນາດ is
ຫາຍໄປ, ຟັງຊັນພະຍາຍາມອ່ານເນື້ອຫາທັງຫມົດຂອງສະຕຣີມຈົນຈົບ. ຖ້າ
ໄດ້ ຂະຫນາດ ແມ່ນໃຫຍ່ກວ່າຕົວຂອງ http, ມັນສົ່ງຄືນຈໍານວນຂໍ້ມູນທີ່ avalaible.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
· ຂະຫນາດ (integer) -- ຂະໜາດການອ່ານທີ່ຕ້ອງການ.
ຜົນຕອບແທນ
ສະເຫມີກັບຄືນ string, string ສາມາດຫວ່າງເປົ່າແມ່ນ connexion ປິດ.
AppletTHTP.send(applet, ຂໍ້ຄວາມ)
ສົ່ງຂໍ້ຄວາມ msg ຢູ່ໃນຮ່າງການຮ້ອງຂໍ http.
Arguments
· applet (class_AppletHTTP) -- ອັນ AppleTTP ລະດັບ
· msg (string) -- ຂໍ້ຄວາມທີ່ຈະສົ່ງ.
ລະດັບ AppletTCP()
ຫ້ອງຮຽນນີ້ແມ່ນໃຊ້ກັບແອັບເປິ້ນທີ່ຕ້ອງການໂໝດ 'tcp'. tcp applet ສາມາດເປັນ
ລົງທະບຽນກັບ core.register_service() ຫນ້າທີ່. ພວກມັນຖືກນໍາໃຊ້ສໍາລັບການປຸງແຕ່ງ
tcp stream ຄືເຊີບເວີຢູ່ດ້ານຫຼັງຂອງ HAProxy.
AppletTCP.c
ຜົນຕອບແທນ
A Converters ລະດັບ
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters.
AppletTCP.sc
ຜົນຕອບແທນ
A Converters ລະດັບ
ຄຸນສົມບັດນີ້ປະກອບດ້ວຍວັດຖຸປະເພດ Converters. ຫນ້າທີ່ຂອງວັດຖຸນີ້
ຕອບສະຕຣິງສະເໝີ.
AppletTCP.f
ຜົນຕອບແທນ
A ດຶງຂໍ້ມູນ ລະດັບ
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches.
AppletTCP.sf
ຜົນຕອບແທນ
A ດຶງຂໍ້ມູນ ລະດັບ
ຄຸນລັກສະນະນີ້ມີວັດຖຸຊັ້ນ Fetches.
AppletTCP.getline(applet)
ຟັງຊັນນີ້ສົ່ງຄືນສະຕຣິງທີ່ມີນຶ່ງແຖວຈາກກະແສ. ຖ້າຂໍ້ມູນ
ກັບຄືນມາບໍ່ມີ '\n' ສຸດທ້າຍທີ່ສົມມຸດວ່າຂໍ້ມູນສຸດທ້າຍຂອງມັນ
ກ່ອນສິ້ນສຸດການຖ່າຍທອດ.
Arguments
· applet (class_AppletTCP) -- ອັນ AppletTCP ລະດັບ
ຜົນຕອບແທນ
ຊ່ອຍແນ່. ສະຕຣິງສາມາດຫວ່າງເປົ່າໄດ້ຖ້າພວກເຮົາໄປຮອດຈຸດສິ້ນສຸດຂອງກະແສ.
AppletTCP.receive(applet[, ຂະຫນາດ])
ອ່ານຂໍ້ມູນຈາກກະແສ TCP, ອີງຕາມການອ່ານທີ່ລະບຸ ຂະຫນາດທີ່ຢູ່ ຖ້າຫາກວ່າ ຂະຫນາດ
ຫາຍໄປ, ຟັງຊັນພະຍາຍາມອ່ານເນື້ອຫາທັງຫມົດຂອງການຖ່າຍທອດຈົນກ່ວາສິ້ນສຸດ.
Arguments
· applet (class_AppletTCP) -- ອັນ AppletTCP ລະດັບ
· ຂະຫນາດ (integer) -- ຂະໜາດການອ່ານທີ່ຕ້ອງການ.
ຜົນຕອບແທນ
ສະເຫມີກັບຄືນ string, string ສາມາດຫວ່າງເປົ່າແມ່ນ connexion ປິດ.
AppletTCP.send(appletmsg)
ສົ່ງຂໍ້ຄວາມໃນກະແສ.
Arguments
· applet (class_AppletTCP) -- ອັນ AppletTCP ລະດັບ
· msg (string) -- ຂໍ້ຄວາມທີ່ຈະສົ່ງ.
ຫ້ອງສະຫມຸດ lua ທີ່ເປັນປະໂຫຍດຫຼາຍສາມາດພົບໄດ້ທີ່ນີ້:
· https://lua-toolbox.com/
ການເຂົ້າເຖິງ Redis:
· https://github.com/nrk/redis-lua
ນີ້ແມ່ນຕົວຢ່າງກ່ຽວກັບການນໍາໃຊ້ຫ້ອງສະຫມຸດ Redis ກັບ HAProxy. ໃຫ້ສັງເກດວ່າແຕ່ລະການໂທ
ການທໍາງານໃດໆຂອງຫ້ອງສະຫມຸດນີ້ສາມາດຖິ້ມຄວາມຜິດພາດໄດ້ຖ້າຫາກວ່າການເຊື່ອມຕໍ່ socket ລົ້ມເຫລວ.
-- ໂຫຼດຫ້ອງສະໝຸດ redis
local redis = require("redis");
ຟັງຊັນ do_something(txn)
-- ສ້າງ ແລະເຊື່ອມຕໍ່ຊັອກເກັດ tcp ໃໝ່
tcp ທ້ອງຖິ່ນ = core.tcp();
tcp:ໝົດເວລາ(1)
tcp:connect("127.0.0.1", 6379);
-- ໃຊ້ຫ້ອງສະໝຸດ redis ກັບຊັອກເກັດໃໝ່ນີ້
local client = redis.connect({socket=tcp});
ລູກຄ້າ:ping();
ໃນຕອນທ້າຍ
OpenSSL:
· http://mkottman.github.io/luacrypto/index.html
· https://github.com/brunoos/luasec/wiki
ໃຊ້ haproxy-lua ອອນໄລນ໌ໂດຍໃຊ້ການບໍລິການ onworks.net