Я пытаюсь реализовать скрипт с серверным сокетом, который также будет периодически опросить данные с нескольких датчиков (т. Е. На 59-й секунде каждую минуту). Я не хочу сериализовать данные на диск, а хранить его в таблице, которую сокет будет отвечать при опросе. Вот некоторый эскиз код, чтобы показать, что я пытаюсь сделать (я не вхожу в клиентском код, который получает доступ к этому серверу, но эта часть OK)Lua - Socket receive с таймером для другого события
#!/usr/bin/env lua
local socket = require("socket")
local server = assert(socket.bind("*", 0))
local ip, port = server:getsockname()
local data = {}
local count = 1
local function pollSensors()
-- I do the sensor polling here and add to table e.g os.time()
table.insert(data, os.time() .."\t" .. tostring(count))
count = count + 1
end
while true do
local client = server:accept()
client:settimeout(2)
local line, err = client:receive()
-- I do process the received line to determine the response
-- for illustration I'll just send the number of items in the table
if not err then client:send("Records: " ..table.getn(data) .. "\n") end
client:close()
if os.time().sec == 59 then
pollSensors()
end
end
Я обеспокоен тем, что сервер может иногда (я), и поэтому я пропущу 59-ю секунду.
Это хороший способ реализовать это или есть (более простой) способ сделать это (скажем, используя сопрограммы)? Если сопрограммы будут лучше, как мне реализовать их для моего сценария?
Не относится к вашему вопросу, но 'table.getn' устарело. – hjpotter92
@ hjpotter92 - спасибо за комментарий, хотя я использовал его здесь только для иллюстрации и не собирался использовать его в своем производственном коде. Тем не менее, приятно знать. – Nepaluz