LINUX.ORG.RU

Могут ли разные прораммы слушать один порт на одном компьютере?

 , ,


0

2

Доброго времени суток.
Вопрос, могут ли разные программы слушать один и тот же UDP порт на одном компьютере и соответственно читать и писать в него.
В общем задача такая (если есть другие идеи реализации), должно быть две (или более (т.е. неопределенное количество)) программы которые общаются между собой. «Общаются между собой» - т.е. любая из программ может передать данные остальным программам.
Принцип в общем такой (к примеру): программа 1 отправила в сеть данные, программы 2,3,4 приняли данные. В другой момент времени, программа 3 отправила в сеть данные, программы 1,2,4 приняли данные.


Пример 4 слушателей порта на одном компьютере:
127.0.0.1:порт
127.0.0.2:порт
127.0.0.3:порт
127.0.0.4:порт

bormant ★★★★★
()
Ответ на: комментарий от bormant

Желательно чтоб один IP и один порт. Например: 127.0.0.1:1234 у всех программ. Это возможно? Или искать другой способ реализации.

rEnSbit
() автор топика
Ответ на: комментарий от outsider

Можно ли посылать именованное сообщение, чтоб все остальные программы знали что это им сообщение?

rEnSbit
() автор топика

На целевой порт повесить балансировщика, а на портыт для программ он уже проксирует, как nginx.

ichi404
()

Вопрос, могут ли разные программы слушать один и тот же UDP порт на одном компьютере и соответственно читать и писать в него.

Могут, если использовать флаги SO_REUSEADDR или SO_REUSEPORT. Но они не увидят пакеты друг друга на одном компе.

Про dbus вам уже рассказали. Есть и варианты полегче, вроде generic netlink.

А можно и иначе. Пусть каждая ваша программа открывает свой UNIX domain socket. Пусть будет одна центральная программа, которая регистрирует остaльные, и держит адреса их сокетов. Через центральную остальные программы найдут друг дружку, и будут отправлять сообщения напрямую по личным сокетам. Максимум производительности, минимум задержек.

Deleted
()
Ответ на: комментарий от rEnSbit

127.0.0.1:1234

Наверно, в сочетании с SO_REUSEADDR это решит вашу задачу!

Deleted
()

Наверное, потребуется брокер сообщений. У apache AMQ есть подписки. Не знаю, насколько оно подходит.

targitaj ★★★★★
()
Последнее исправление: targitaj (всего исправлений: 1)
Ответ на: комментарий от anonymous

Пока склоняюсь к мультикасту, т.к. когда-то писал клиента под мультикаст вещание. Но может ли участник группы посылать данные другим участникам группы (включая сервер)?

rEnSbit
() автор топика
Ответ на: комментарий от rEnSbit

Тебе правильно намекнули выше. В мультикасте нет клиентов и серверов. Все могут отправлять пакеты в группу и получать пакеты из неё. Единственное, отправка самому себе обычно блокируется операционной системой (либо именно отправка, либо прием от самого себя - в зависимости от ОС).

asaw ★★★★★
()
Ответ на: комментарий от rEnSbit

Пока склоняюсь к мультикасту, т.к. когда-то писал клиента под мультикаст вещание. Но может ли участник группы посылать данные другим участникам группы (включая сервер)?

Несколько программ на одном компьютере будут общаться между собой через UDP multicast?

Знатный костыль.

proud_anon ★★★★★
()
Ответ на: комментарий от asaw

Ведроид способен, фрибзд, оппень способна, при определённых управляющих девайсах.

anonymous
()
Ответ на: комментарий от rEnSbit

Тебе хочется иметь проблем с рутерами? Циска, китайский свич или рутер — и хана твоим мультикастам! У нас регулярно такие сбои происходят, приходится еще на случай кирдыка иметь резерв — запрос уникастами.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Это всё локально должно быть.



P.S. Уже сделал. Работает кайне шустро. )))))

rEnSbit
() автор топика
Ответ на: комментарий от Eddy_Em

Вот именно этого и не хотел, т.е. управлять подключениями. Так как количество клиентов/слушателей заранее не известно и может меняться динамически.

rEnSbit
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.