I
Size: a a a
S
tcp:receive("*l")
, чтобы принимать построчно (разделитель \r\n
или аналог), или tcp:receive(1024)
, чтобы принять 1024 байта. До момента пока не пришлют — не разблокирует.S
local req = {}
local line = tcp:receive('*l')
local a, b, c = line:match("(%w+) (/%S*) (.*)")
req.verb, req.location, req._v = a, b, c
req.headers = {}
-- в конце заголовков идёт пустая строка
line = tcp:receive('*l')
while line ~= "" do
local k, v = line:match("(.-): (.*)")
req.headers[k] = v
line = tcp:receive('*l')
end
local len = req.headers["Content-Length"] or 0
len = tonumber(len)
req.body = len and tcp:receive(len)
--*тут можно прерывать, переходить к чтению следующего запроса и т.д.*Оно не примет чанковое содержимое, сломается на попытке залить пару гигов (x32) и в целом нифига не асинхронное, но для баловства — вполне.
S
local resp = {}
local line = tcp:receive('*l')
local a, b, c = line:match("(.-) (%d+) (.*)")
resp._v, resp.status, resp.sstatus = a, b, c
resp.headers = {}
...
остальное аналогично серверу.I
tcp:receive("*l")
, чтобы принимать построчно (разделитель \r\n
или аналог), или tcp:receive(1024)
, чтобы принять 1024 байта. До момента пока не пришлют — не разблокирует.S
S
S
I
S
MC