запрос нескольких серверов - PullRequest
0 голосов
/ 30 ноября 2009

Я создаю веб-сервис, который должен запрашивать от 1 до n файловых серверов и в результате получать несколько файлов. У кого-нибудь есть хорошая идея сделать это? Потоки сделали бы хорошую работу? Что если соединение с некоторыми серверами занимает больше времени, чем с другими? Как узнать, действительно ли у меня ВСЕ запрошенные файлы?

Спасибо

1 Ответ

1 голос
/ 30 ноября 2009

Ваш вопрос довольно общий и будет моим ответом, в любом случае, я надеюсь, что он будет полезен.

Я бы сказал, что у вас есть два варианта:

  1. Используйте асинхронную модель. Вы открываете соединения с N файловыми серверами и настраиваете обратный вызов (или событие), который будет запускаться при получении данных от одного сервера (обычно эти обратные вызовы будут вызываться в новом потоке, но проверьте документацию для вашей рабочей структуры ). Вы получаете идентификатор соединения из данных, переданных обратному вызову / событию, и обновляете соответствующий файл.

  2. Использовать модель синхронного опроса. Вы открываете соединения с N файловыми серверами и вводите цикл, в котором вы опрашиваете каждое соединение на наличие новых данных; когда новые данные доступны, вы обновляете соответствующий файл. Вы выходите из цикла, когда все файлы полностью загружены.

Что касается того, как вы знаете, когда все файлы заполнены, для этого не существует автоматического способа. Вам необходимо установить соглашение, известное вам и серверу, о том, как узнать, что файл полностью отправлен. Опции включают в себя: сервер закрывает соединение, когда файл завершен (не очень безопасно, так как соединение может быть случайно закрыто), сервер отправляет размер файла до содержимого файла, и конец файла сигнализируется специальной последовательностью символов (это работает лучше для текстовых файлов, где байты конца последовательности файлов обычно не встречаются).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...