Машина A должна отправить сообщение на машину B. Машина A имеет статический IP-адрес, а машина B - нет.
Один из вариантов, который я мог бы решить для решения этой проблемы, заключается в том, что машина B открывает TCP-соединение с машиной A, а затем машина A отправляет данные / сообщения на машину B. Однако это решение имеет следующие ограничения:
a) Это не масштабируется, если существует много таких машин, как машина B, на которую / которые были отправлены данные. Это может быть уничтожение ресурсов машины A.
b) Это машина А, которая должна отправлять данные, когда она хочет. Машина B не знает , когда будут данные для него. В текущем варианте машина B должна будет постоянно опрашивать машину A с TCP-соединением, спрашивая, есть ли у него какие-либо данные для него или нет. Это может дорого обойтись, если есть много машин B.
Есть ли менее дорогой способ решить эту проблему? На ум приходит шаблон проектирования Observer. Машина B может подписаться на уведомление от машины A, чтобы сообщить ему, когда данные станут доступны. Однако как реализовать шаблон в распределенной среде, когда компьютер B не имеет статического IP-адреса?
Кроме наблюдателя, есть ли другой способ, кроме использования необработанных сокетов для машины A для отправки этих данных на машину B, который был бы дешевле?