Справка по разработке безсерверной программы Lan Chat! - PullRequest
6 голосов
/ 20 декабря 2008

Я хочу разработать простую программу Serverless LAN Chat просто для удовольствия. Как я могу это сделать ? Какой тип архитектуры я должен использовать?

В прошлом году я работал над проектом приложения TCP / UDP клиент / сервер. Это было просто (сервер прослушивает определенный порт / сокет, а клиент подключается к порту сервера и т. Д.). Но я понятия не имею, как разрабатывать «безсерверный». Программа LAN Chat. Как я могу это сделать? UDP, TCP, Multicast, Broadcast? или должна ли программа вести себя как сервер и клиент?

Ответы [ 3 ]

10 голосов
/ 21 декабря 2008

Самый простой способ - использовать UDP и просто транслировать ваши сообщения по всей сети. Чуть более продвинутой версией было бы использование широковещания только для обнаружения других узлов в сети.

  • Каждый узел поддерживает список известных пиров.
  • Сообщения отправляются по TCP всем известным партнерам.
  • Когда узел запускается, он отправляет широковещательную рассылку UDP для обнаружения других узлов.
  • Когда узел получает широковещательную рассылку обнаружения, он отправляет «себя» источнику широковещательной передачи, чтобы он сам узнал себя. Принимающий узел добавляет вещателя в свой список известных пиров.
  • Когда узел выходит из сети, он отправляет другую широковещательную рассылку, чтобы сообщить оставшимся узлам, что они должны удалить отброшенного клиента из своего списка.

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

1 голос
/ 21 декабря 2008

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

Из объявления:


Spread - это набор инструментов с открытым исходным кодом, который обеспечивает высокопроизводительную службу обмена сообщениями, устойчивую к сбоям в локальных и глобальных сетях. Распространение функционирует как унифицированная шина сообщений для распределенных приложений и обеспечивает настраиваемую многоадресную передачу на уровне приложений, групповую связь и поддержку точка-точка. Распространение услуг варьируется от надежных сообщений до полностью заказанных сообщений с гарантией доставки.

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

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

Некоторые услуги и преимущества, предоставляемые Spread:

  • Надежный и масштабируемый обмен сообщениями и групповое общение.
  • Очень мощный, но простой API упрощает построение распределенных архитектур.
  • Простота в использовании, развертывании и обслуживании.
  • Высокая масштабируемость от одной локальной сети до сложных глобальных сетей.
  • Поддерживает тысячи групп с разными наборами участников.
  • Обеспечивает надежность сообщений при наличии сбоев компьютеров, сбоев и восстановлений процессов, а также сетевых разделов и слияний.
  • Обеспечивает ряд гарантий надежности, порядка и стабильности сообщений.
  • Акцент на надежность и высокую производительность.
  • Полностью распределенные алгоритмы без центральной точки отказа.
0 голосов
/ 27 февраля 2009

Яблоки iChat - пример того продукта, который вы планируете представить. Он использует Bonjour (сетевой протокол Apple с нулевым разрешением) для идентификации пиров в локальной сети. Затем вы можете общаться с ними в чате или аудио / видео.

Я не совсем уверен, как внутри работает Bonjour, но я знаю, что он использует многоадресную рассылку. Клиенты «регистрируют» сервисы в локальной сети, а протокол Bonjour позволяет каждому хосту открывать каталог хостов для данной услуги (все без центрального управления).

...