Из того, что это звучит, вам нужен пинг только тогда, когда страница загружена, и люди смотрят ее.Если это так, я думаю, вы можете избежать бэкэнд-процесса.
Я бы подумал, что вызов ajax для действия контроллера, который пингует, а затем выводит ответ.Вы можете управлять частотой, запускать, останавливать javascript на странице и обновлять конкретный div или другой объект страницы с помощью ответа.
В этом примере используется библиотека ping рубина, которая возвращает только true.Если вам нужно больше функциональности, есть другие доступные библиотеки (например, net-ping ).
В вашем контроллере
require 'ping'
def ping
if Ping.ping_echo(params[:hostname], params[:timeout])
render :text => "Oh goodie, it pinged successfully"
else
render :text => "No go on the pingage"
end
end
А затем в вашем javascript (я используюjQuery, но вы можете использовать prototype / scriptaculous или ваш любимый JS-фреймворк):
function ping_host {
$.get("/controller/ping", function(data){
$("#some_div_id").append(data);
});
}
Оттуда вы можете использовать команду setTimeout, чтобы запускать ее каждые 5 секунд или как бы часто вы ни хотели генерировать пинг.
Если вам нужен постоянный пинг, вы можете посмотреть на некоторые обработчики заданий бэкэнда, такие как resqueue , которые бы обновляли таблицу базы данных с результатами пинга, или хранилище memcachedчто вы затем опросите, используя метод, описанный выше со страницы.