Задать вопрос
@rsi
software engineer

Проблемы с непрерывным чтение файла из сетевой папки?

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

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

Программа написана на делфи и использует системные ф-ции Windows API ReadFile из Kernel32.dll.

Немного инфы по проблемным компам:
1) У нас в организации больше 5 тысяч ПК разбросанных по всей стране, а ошибки возникают ну может на 3-5%.
2) Сами компы ничего не объединяет, это разное железо, разные билды ОС.
3) У нас есть партия из 50 моноблоков в одном крыле на 49 все работает, а на 50 нет, хотя один одинаковые, и даже ОС на них оем (по логике должна быть одинаковая).

Пробовали общаться с разработчиками, они утверждают, что проблема не в софте, а в системе, но мы уже сломали себе головы пытаясь понять в каком месте системы формируется такое странное поведение.
  • Вопрос задан
  • 1570 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 4
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
На сколько хороша или плоха эта архитектура упустим.

Какраз это упускать и не нужно.
Подобные выверты работают на ура пока имеем небольшое количество клиентов, с их ростом начинаем упираться во всякие ограничения как программные так и физические.

Пробовали общаться с разработчиками, они утверждают, что проблема не в софте, а в системе,


Моё мнение что проблема в софте, по описанию работы этого софта я вижу решения "на авось" и явно не вложена маштабируемость. Да и вообще использовать сетевую шару для нонстоп обмена данными - извращение.
Предложите разработчикам всё-же выполнить свою работу (если софт заказной) и переписать свой ласопед на работу с БД.

В общем софт явно делался из расчёта "здесь и сейчас решить задачу" и не думали о завтра.
Ответ написан
vpuhoff
@vpuhoff
Программист в свободное от работы время
Тоже пытался работать с подпиской на эти функции, работает через ж. Проблема в сервере, который как я понял "не отправляет уведомление клиентам" и соответственно те не видят что обновление произошло. Иногда помогает переустановка оси на сервере, но временно, потом все равно перестает работать.
Ответ написан
@DastiX
Повторять про программное обеспечение не буду, так как все точно и правильно написано, но проблему в любом случае надо решать, и здесь могу посоветовать сделать терминальный сервер с подключением к этой шаре, а клиентам раздать rdp-ярлыки. Можно целиком удаленку, можно через RemoteApp.

В такой конфигурации точка отказа сети будет только одна.
Ответ написан
@Alexeyslav
Программирование, электроника
Эта проблема похоже в сетевом взаимодействии. Теряются пакеты в сети по пути следования и коннект зависает пока не передернуть - на сервере коннект отваливается по таймауту, а клиент не в курсе этих событий.

Как временное решение - переоткрывать файл если не было обновлений последнюю минуту.
Но по всей видимости, проблему можно решить проще написав под это дело свой сервер, который просто будет рассылать всем подключившимся клиентам изменения вносимые в файл. По всей видимости, изменения в код необходимо внести минимальные - вместо функции открытия файла подставить функцию открытия сокета, а чтение заменить чтением из сокета.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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