Как показать вывод ping динамично в веб-странице?

Как часть страницы диагностики я хотел бы сделать, чтобы пользователь смог выполнить "ping", т.е. обычную команду оболочки, чтобы отправить ICMP_ECHO_REQUSTs в определенный IP и отобразить resuls динамично в отделении в браузере.

Бэкендом является Ruby/направляющие.

Я перестаю выполнять команду на стороне сервера и читать вывод из команды ping.

И я создавал веб-страницы, который периодически перезванивает к серверу для обновления som частей страницы динамично.

Но в этом случае существует три проблемы:

  • смогите иметь ajax, перезванивают к uri/url для нахождения процесса, который выполняет команду ping
  • идеально смогите обновить страницу, когда команда ping возвратит новую строку данных
  • Дополнительно смогите "повредить" ping. С ping я могу, конечно, просто установить опцию только отправить ping x и затем выйти и таким образом избавление от необходимости остановить процесс. Но у меня также есть другой инструмент, который был бы следующим, средство просмотра журнала, и тот инструмент не останавливается отдельно после определенного числа строк, но продолжается навсегда если не прерванный, т.е. с Ctrl-C.

Я настраиваю кэш-память к рандеву с ping выполнения процесса или есть ли более простой путь?

Я искал много взглядов, что это должно быть проблемой, достаточно распространенной, чтобы иметь плагин направляющих просто волшебно реализация, что необходимо, но я не нашел много вообще.

Какие-либо предложения или указатели?

9
задан Siddharth 1 July 2013 в 07:35
поделиться

1 ответ

Судя по всему, пинг нужен только тогда, когда страница загружена и люди ее смотрят. Если это так, я думаю, вы можете избежать внутреннего процесса.

Я бы подумал, что 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, которое вы затем Проведите опрос, используя метод, аналогичный приведенному выше со страницы.

2
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: