У меня есть этот программный продукт, назовем его агентом, развернутым на каждой машине в локальной сети.Время от времени, он должен получить обновление с сервера.Это означает, что каждая машина в этой сети подключается к моему серверу и загружает новую версию размером несколько МБ.
Чего я хочу достичь: как только первая машина получит обновление с сервера, другие машины должны получить обновление от той, которая уже получила его, в одноранговой сети.
Идеи, которые у меня есть на данный момент:
Использование общей папки в сети, первая машина, которая получает обновление, помещает ее в эту общую папку.Каждая машина проверяет общую папку, прежде чем перейти на мой сервер.Это работает, но у меня возникают проблемы, если совместное использование не включено в окнах, брандмауэрах, правах доступа и т. Д.
Каждый агент открывает сокет, доступный для внутренней сети (возможно, открыть сокет tcpна случайном порте 127.0.0.1, о котором знают все агенты).Перед извлечением обновления отправьте сообщение в сеть, в которой вы запрашиваете обновление, и, если никто не отвечает, что у него есть обновление, перейдите на сервер.Иначе, получите обновление от агента, который ответил, так как они, вероятно, уже получили обновление от сервера или от некоторых других агентов.Проблемы, с которыми я здесь сталкиваюсь, состоят в том, что я действительно не знаю, как продолжить обнаружение сети, и какое влияние это может оказать на производительность.
Создайте приложение локального сервера, опубликуйте его накакой-то узел внутренней сети (один из компьютеров), к которому все остальные агенты подключаются для обновления.Этот локальный сервер получает обновление только в первый раз и «кэширует» его, передавая его любому агенту, запрашивающему его.Это мой наименее любимый вариант, поскольку он подразумевает локальный сервер.Если этот сбой, другой узел не может получить обновления.Конечно, я могу реализовать механизм возврата к реальному серверу, но все же.Кроме того, каждый агент должен точно знать, кто такой «хозяин», и с этим будет еще сложнее справиться.
Если у вас, ребята, есть какие-нибудь лучшие идеи или какие-либо рекомендации поприведет меня, будет очень признателен.
Спасибо.