Я пытаюсь использовать ультрафиолетовый рабочий поток в Luvit для какого-то внешнего вызова, который обычно блокирует.Из-за этого я пытаюсь использовать именованные каналы для сериализации результата работника потока ... и вот что не работает: обратный вызов соединения клиента, кажется, не вызывается, хотя из напечатанных сообщений вызывается обратный вызов прослушивания сервера.
Для краткости я представляю аналогичный пример на основе синхронизирующего излучателя для имитации событий:
local uv=require("uv")
local Emitter=require("core").Emitter
local thread=require("thread")
local timer = require("timer")
local beacon=Emitter:new()
timer.setInterval(500,function()
beacon:emit("emit")
end)
local work = thread.work(function(mess)
local uv = require("uv")
local pipewrite=function(mess)
local SOCK = "\\\\.\\pipe\\echo.sock"
local client = uv.new_pipe(false)
local connect_cb=function(err)
assert(not err, err)
thisisnotthecommandyourelookingfor()
p("connecting")
client:write(mess)
end
client:connect(SOCK,connect_cb)
end
pipewrite(mess)
end,function() end)
beacon:on('emit',function()
p("emitting")
thread.queue(work,"emmited")
end)
local SOCK = "\\\\.\\pipe\\echo.sock"
local server = uv.new_pipe(false)
local ret, err, code = server:bind(SOCK)
-- if file already exists, remove it first and try again
if not ret and code == "EADDRINUSE" then
local fs = require("fs")
fs.unlinkSync(SOCK)
_, err, _ = server:bind(SOCK)
assert(not err, err)
else
assert(not err, err)
end
server:listen(128, function (err)
assert(not err, err)
local client = uv.new_pipe(false)
server:accept(client)
p("connected")
client:read_start(function (err, chunk)
assert(not err, err)
if chunk then
print("Got: " .. chunk)
-- client:write(chunk)
else
client:shutdown()
client:close()
end
end)
end)
uv.run()
Кто-нибудь почему-то не печатает сообщение connection и ошибок нетиз это не команда для поиска () несуществующей функции?:)
Спасибо