Мониторинг пользовательского интерфейса с использованием net-SFTP
Я разрабатываю приложение, и мне нужно скачать некоторые файлы, используя sftp. Я установил gem net-sftp, и он отлично работает. Используя процесс мониторинга, я нашел на этой странице: http://net-ssh.rubyforge.org/sftp/v2/api/, я могу видеть прогресс в моем терминале. Дело в том, что я хотел бы позволить пользователю видеть, что происходит во время процесса, показывая индикатор выполнения и, возможно, отображать строку мониторинга в моем пользовательском интерфейсе.
Я пробовал много вещей, но ни одна из них не работает. Когда я вхожу в цикл загрузки, я не могу изменить ни одну из переменных моего экземпляра, поэтому я не могу сохранить данные мониторинга, чтобы отобразить их с помощью JavaScript. alter-filters тоже не работает.
Я не знаю, как хранить информацию в цикле, чтобы использовать ее в моем пользовательском интерфейсе. Любая идея?
2 ответа
Я собираюсь предположить, что у вас что-то подобное происходит...
1. client ----> 'do sftp tranfer' ----> server
2. server ------> 'doing sftp'
3. client <---- 'done sftp' ----------- server
Коротким ответом будет то, что вы не можете легко дать прогресс клиенту в этой ситуации.
Более длинный ответ будет состоять в том, что вам нужно открыть какой-то поток с клиентом для отправки прогресса.
1. client ----> 'do sftp tranfer' ----> server
2. server ------> 'doing sftp'
3. client <====> 'open stream' <===> server
4. client <---- 'OK' ----------- server
Хитрость здесь заключается в обмене данными между двумя процессами на сервере, которые выполняют поток, и sftp. s
Я собираюсь прыгнуть во что-то подобное, и я верю, что это будет мой подход. В настоящее время у меня есть сервер доступа к местоположению и загрузки файла. Пока это происходит, сервер будет проверять размер файла каждые ~ 5 секунд и сообщать о размере. Если вы возьмете размер файла и сообщите об этом еще до начала загрузки, то, я думаю, вы сможете добиться прогресса.