Снова в школу |
---|
У меня есть устройства, которые надо периодически опрашивать и информацию по ним отсылать на клиенты. |
Разделите задачу на независимые части.
Первая - это работа сервера с устройствами. Сервер в данном случае выполняет роль клиента, а устройство - роль сервера. Т.е. сервер создаёт клиентский сокет и обращается к устройству. Получив запрос, устройство формирует серверный сокет. Образуется канал передачи данных, по которому устройство отсылает на сервер необходимые данные и получает от сервера команды. По завершении сеанса канал разрывается по инициативе одной из сторон, а сокеты расформируются. Сервер накапливает полученные от приборов данные.
Вторая - это работа сервера с клиентами. Тут возможны три варианта.
Первый - push-технология. На сервере имеется список клиентов, формируемый статически (настройками сервера, регистрацией на нём клиентов) или динамически (клиент анонсирует своё наличие, сервер его регистрирует, клиент периодически подтверждает своё наличие). По заданным правилам (по времени, по факту получения данных от приборов) сервер отсылает информацию зарегистрированным клиентам (использовать при этом создание канала к клиенту сервером или использовать, например, мультикастовую рассылку - решайте сами).
Второй - пассивная технология. Клиент подключается к серверу и по установленному каналу получает данные, после чего отключается. Потребуется следующая порция - клиент опять подключится. Альтернативно - канал не разрывается, а держится постоянно, и клиент периодически по нему запрашивает новые данные, а если перерыв велик, то просто подтверждает своё присутствие, соединение либо закрывается по инициативе клиента (выгрузка), либо разрывается сервером по тайм-ауту.
Третий - активная технология. используются два подключения. Клиент подключается к серверу и по установленному каналу передаёт данные для обратного подключения и команды. Сервер по переданным параметрам устанавливает обратное соединение с клиентом и по нему передаёт данные и ответы на команды.