Мы хотим заменить нашу текущую систему обновления программного обеспечения POS в наших магазинах. В настоящее время на нашем веб-сервере есть папка, в которой размещается скрипт, который наши регистры вызывают примерно каждые 30 минут. Они передают номер своей текущей версии, а сервер возвращает ответ XML, содержащий все файлы, которые необходимо обновить, хэш и любую другую соответствующую информацию для регистра, чтобы загрузить обновленные файлы.
Нам нужен сервис, который будет прослушивать отправляемые нами UDP-пакеты, которые мы можем использовать для запуска обновления. Это предотвратит ненужный опрос регистров на наличие обновлений. Мы пишем сервер обновлений, который будет прослушивать TCP-соединение с компьютера, проверять подлинность, вести некоторые журналы, а затем отправлять обновления для файлов, которые изменились. Мы хотим перейти на пользовательский сервер обновлений, поскольку нам необходимо выпустить версии POS на определенных компьютерах для пробного запуска после тестирования перед выпуском его в масштабах всей компании.
Я написал код для обработки входящих соединений и создания нового потока для связи с этим клиентом и т. Д., Но мне трудно работать с многопоточным способом обработки файлового ввода-вывода.
Я почти уверен, что не смогу получить доступ к файлу, открыв его из одного потока, если он уже открыт в другом. Я не хочу заранее читать файлы в память и хранить их в поточно-безопасном контейнере, так как это потребовало бы много памяти, особенно если выяснится, что мне нужно сохранить копию для каждого потока, чтобы избежать проблем с потоками.
Каков наилучший способ получения доступа к этим файлам с диска / памяти в поточно-ориентированном режиме без использования большого количества памяти или не заставляя потоки ждать, пока другие потоки закончат работу с файлами? * *
РЕДАКТИРОВАТЬ: Забыл упомянуть, что мы используем C #.