Как часть страницы диагностики я хотел бы сделать, чтобы пользователь смог выполнить "ping", т.е. обычную команду оболочки, чтобы отправить ICMP_ECHO_REQUSTs в определенный IP и отобразить resuls динамично в отделении в браузере.
Бэкендом является Ruby/направляющие.
Я перестаю выполнять команду на стороне сервера и читать вывод из команды ping.
И я создавал веб-страницы, который периодически перезванивает к серверу для обновления som частей страницы динамично.
Но в этом случае существует три проблемы:
Я настраиваю кэш-память к рандеву с ping выполнения процесса или есть ли более простой путь?
Я искал много взглядов, что это должно быть проблемой, достаточно распространенной, чтобы иметь плагин направляющих просто волшебно реализация, что необходимо, но я не нашел много вообще.
Какие-либо предложения или указатели?
Судя по всему, пинг нужен только тогда, когда страница загружена и люди ее смотрят. Если это так, я думаю, вы можете избежать внутреннего процесса.
Я бы подумал, что ajax-вызов действия контроллера, который проверяет, а затем выводит ответ. Вы можете контролировать частоту, запуск, остановку с помощью javascript на странице и обновлять конкретный div или другой объект страницы с помощью ответа.
в этом примере используется библиотека ruby 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, которое вы затем Проведите опрос, используя метод, аналогичный приведенному выше со страницы.