Niet-blokkerende I/O met luasocket
Gebruik luasocket in niet-blokkerende modus, geïntegreerd met een coroutinescheduler
Niet-blokkerende I/O met luasocket is een gratis Lua Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.
Wat is luasocket?
luasocket is een Lua-bibliotheek met TCP/UDP-sockets en clients voor HTTP, FTP en SMTP. Standaard werkt de bibliotheek blokkerend; de niet-blokkerende modus maakt asynchrone I/O mogelijk.
luasocket installeren
Installeer via LuaRocks: luarocks install luasocket. Vereis de bibliotheek in je script.
local socket = require("socket")
local tcp = socket.tcp()Een TCP-socket maken
Maak een TCP-clientsocket en verbind die met een server.
local tcp = socket.tcp()
tcp:connect("example.com", 80)
tcp:send("GET / HTTP/1.0\r\nHost: example.com\r\n\r\n")
local response = tcp:receive("*a")
tcp:close()
print(response:sub(1, 200))Niet-blokkerende modus
Stel de socket in op niet-blokkerend met tcp:settimeout(0). Lees- en schrijfbewerkingen retourneren onmiddellijk een time-outfout als er geen gegevens gereed zijn.
tcp:settimeout(0) -- non-blocking
local data, err = tcp:receive(1024)
if err == "timeout" then
-- no data yet, try again later
elseif data then
print("Got:", data)
endIntegratie met coroutines
Combineer niet-blokkerende sockets met coroutines: laat de coroutine yielden wanneer gegevens nog niet gereed zijn en hervat die wanneer de selector aangeeft dat de gegevens gereed zijn.
local function readAsync(sock)
while true do
local data, err = sock:receive(1024)
if data then return data end
if err ~= "timeout" then error(err) end
coroutine.yield() -- let other tasks run
end
endsocket.select
socket.select(readSet, writeSet, timeout) retourneert sets met sockets die gereed zijn voor I/O — de basis van een echte gebeurtenislus.
local readable, writable = socket.select({sock1, sock2}, nil, 0.1)
for _, s in ipairs(readable) do
local data = s:receive(1024)
-- handle data
endHTTP-client
luasocket bevat een hoogwaardige HTTP-module voor eenvoudige aanvragen.
local http = require("socket.http")
local body, code = http.request("http://example.com")
print(code, #body)UDP-sockets
UDP is verbindingsloos. Gebruik socket.udp() voor communicatie op basis van datagrammen.
local udp = socket.udp()
udp:setsockname("*", 0)
udp:sendto("hello", "127.0.0.1", 9999)
local data = udp:receive()
udp:close()Time-outs
Stel een time-out in met :settimeout(seconds). Een time-out van 0 is niet-blokkerend; een positief getal staat gedeeltelijk blokkeren toe; nil betekent onbeperkt blokkeren.
Patroon voor foutafhandeling
Functies van luasocket retourneren bij een fout nil plus een fouttekenreeks. Controleer altijd de tweede geretourneerde waarde.
local ok, err = tcp:connect("host", 80)
if not ok then
error("Connection failed: " .. tostring(err))
endOpenResty als alternatief
Voor niet-blokkerende I/O in productie zijn de cosockets van OpenResty in LuaJIT veel krachtiger en beter presterend. Gebruik luasocket voor zelfstandige scripts en eenvoudige hulpprogramma's.
Vraag over niet-blokkerende werking
Wat doet tcp:settimeout(0)?
Samenvatting: niet-blokkerende I/O
Gebruik settimeout(0) voor niet-blokkerende sockets en socket.select voor I/O-multiplexing. Combineer dit met coroutines: yield bij een time-out en hervat wanneer gegevens gereed zijn. Kies voor krachtige asynchrone I/O bij voorkeur OpenResty of luv.
Leer Lua met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 40
- Lessen
- 159
Veelgestelde vragen
Is de les “Niet-blokkerende I/O met luasocket” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Niet-blokkerende I/O met luasocket”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.
Wat leer ik in “Niet-blokkerende I/O met luasocket”?
Gebruik luasocket in niet-blokkerende modus, geïntegreerd met een coroutinescheduler Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Lua Academy te beginnen?
Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Niet-blokkerende I/O met luasocket”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Lua Academy?
Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Een eenvoudige eventloop bouwen
- Async/await met coroutines
- Promiseachtige patronen
- Niet-blokkerende I/O met luasocket