2016-01-04 2 views
2

Я использую lua-websockets https://github.com/lipp/lua-websockets, чтобы попытаться запустить сервер веб-сокетов.Lua websockets for heka

Используя пример Copas они предоставляют:

local copas = require'copas' 

local server = require'websocket'.server.copas.listen 
{ 

    port = 8080, 

    protocols = { 
    echo = function(ws) 
     while true do 
     local message = ws:receive() 
     if message then 
      ws:send(message) 
     else 
      ws:close() 
      return 
     end 
     end 
    end 
    } 
} 

copas.loop() 

Это работает и начинает слушать порт 8080, и я могу подключиться и получить эхо-ответ обратно.

Проблема в том, что я пытаюсь интегрировать его с heka. Я начинаю heka, и он запускает сервер websocket, но зависает при загрузке плагина. Когда он пытается «загрузить» плагин, он выполняет сценарий lua.

Теперь, мой вопрос: как мне запустить сервер websocket и отправить «успех», чтобы он продолжал запускать. Просто это было бы: если websocket прослушивает 8080, вернитесь к heka и скажите, что сценарий lua был успешно выполнен.

Заранее благодарен!

ответ

0

Не вызывайте copas.loop(), так как он входит в неопределенный цикл, который обрабатывает все взаимодействия сокетов copas. Вместо этого вы должны использовать copas.step() (см. Раздел controlling copas) и назовите его в соответствующее время с вашего кода heka (этот вызов вернет false по таймауту и ​​true, когда он что-то обработает). В приложении GUI его можно вызывать из обработчика IDLE.