Эрланг общий вопрос по сокету - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть вопрос о проекте, который я должен реализовать для курса по распределенной системе.

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

Мне кажется, что это довольно легко реализовать в erlang из-за его структуры передачи сообщений ... больше очков дается, если вы используете вызов rpc вместо обычной реализации на основе сокетов ..

Теперь мой вопрос таков: один из обязательных пунктов этих проектов требует, чтобы сокеты не оставались открытыми, когда между процессами не происходит обмена данными ...

Наш курс проводится на C, но мы можем свободно использовать любой язык, который нам нравится ... Могу ли я удовлетворить это ограничение, используя узлы erlang и вызовы rpc?

заранее спасибо

Ответы [ 2 ]

2 голосов
/ 17 ноября 2010

Несмотря на то, что говорят другие ответы, поведение Erlang по умолчанию не удовлетворяет вашим ограничениям.

Типичная сеть узлов Erlang, использующих распределение Erlang, будет оставаться плотно связанной (каждый узел подключен к каждому другому узлу) с сокетами TCPоткрывать, даже если вы их не используете.Вам придется либо использовать -connect_all false и управлять открытием / закрытием соединений с другими узлами самостоятельно, либо вам придется разработать собственный протокол распространения.Я бы порекомендовал последнее, особенно если учить.Хитрость, чтобы упростить это, состоит в том, чтобы использовать term_to_binary и binary_to_term.

2 голосов
/ 16 ноября 2010

Да.Модуль rpc даже имеет multicall, который принимает список узлов и будет делать именно то, что вы описали.Он не будет держать ваши розетки открытыми, если он не использует их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...