Lua Academy · Les

Niet-blokkerende I/O met luasocket

Gebruik luasocket in niet-blokkerende modus, geïntegreerd met een coroutinescheduler

Les 4 van 413 stappen

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)
end

Integratie 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
end

socket.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
end

HTTP-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))
end

OpenResty 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.

Gratis beginnen

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

  1. Een eenvoudige eventloop bouwen
  2. Async/await met coroutines
  3. Promiseachtige patronen
  4. Niet-blokkerende I/O met luasocket
← Terug naar Lua Academy