Требуется разъяснение концепции приложения LAN

Недавно я разработал простое приложение для чата на Java с использованием сокетов. Он работал нормально. Но теперь я хочу сделать приложение, которое может общаться через локальные сети, такие как IPMSG. Особенности будут

  1. отправка сообщения.
  2. отправка файла.
  3. голосовой чат.
  4. Групповой чат.
  5. шифрование/дешифрование по запросу.

Это были основные функции, которые должны были быть включены.

Теперь путаница, с которой я сталкиваюсь здесь,

  • Приложение представляет собой одноранговое приложение, в котором один пользователь может делать все, что могут делать другие пользователи.
  • Нет централизованного сервера и нет клиента. Каждый узел действует как сервер и как клиент.

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


person Ankur Trapasiya    schedule 05.02.2012    source источник


Ответы (3)


Я думаю, что основная причина, по которой рекомендуются отношения сервер-клиент, заключается в том, чтобы упростить регистрацию или создать большой чат для всех (например, IRC). Если требуется вход в систему, сервер также проверит данные для входа. Таким образом, без промежуточного сервера с фишинговыми атаками будет сложнее бороться.

Однако я не понимаю, почему чат P2P не работает. Если я правильно помню, Skype делает это. Я всегда любил децентрализацию. Удачи тебе с твоим проектом. :)

person Breina    schedule 05.02.2012
comment
Нет возможности авторизоваться. Приложение просто показывает людей в локальной сети, и они могут общаться друг с другом в той среде, в которой они хотят общаться. - person Ankur Trapasiya; 05.02.2012
comment
@ankur.trapasiya Ой, извините, забыл об этой части названия. Ну, так как это местное, я не вижу проблемы ни в чем. - person Breina; 05.02.2012
comment
@ankur.trapasiya: В том-то и дело. Если у вас нет выделенного сервера, на который может войти каждый клиент, вам придется разработать еще один децентрализованный метод управления тем, кто находится в сети, а кто нет. Например, в локальной сети возможным решением является широковещательная передача пакетов маяков. - person buc; 05.02.2012
comment
@buc: я не понимаю, что ты пытаешься сказать? Вы говорите, что я должен следовать принципу «равный-равному»? - person Ankur Trapasiya; 05.02.2012
comment
Все, что я говорю, это то, что некоторые функции, которые легко реализовать с помощью концепции централизованного сервера и клиентов (например, поддержка текущих онлайн-пользователей), могут потребовать дополнительных усилий по разработке при следовании архитектуре одноранговой сети. - person buc; 06.02.2012

Вы можете ознакомиться со стандартом Zeroconf и пакетами, которые его используют, например Avahi (linux FOSS) или Bonjour (Apple и Windows с открытым исходным кодом, но не GPL). Zeroconf позволяет настраивать и обнаруживать сетевые службы без взаимодействия с пользователем или центрального сервера конфигурации.

person Community    schedule 05.02.2012
comment
Вероятно, стоит добавить, что iChat использует Bonjour для обнаружения локальной сети для своего клиента iChat. - person ; 05.02.2012
comment
Ну, я пытаюсь разработать приложение для всех ОС и в java. Мой вопрос остается в силе. Какая модель подходит для модели Server-Client или Peer-Peer... :-) - person Ankur Trapasiya; 05.02.2012
comment
Извините, я не был очень конкретным. Zeroconf (используемый Bonjour) используется в iChat для общения в локальной сети без необходимости использования централизованного сервера. Таким образом, если вы используете iChat в той же локальной сети, что и другой компьютер, он обнаружит службу чата, запущенную на этом компьютере, и автоматически подключится к ней, что позволит вам общаться в чате без централизованного сервера. - person ; 06.02.2012
comment
Как вы написали, Bonjour доступен только для MAC и Windows, я также должен сделать свое приложение совместимым с Linux. Итак, не могли бы вы назвать имя любого такого API? - person Ankur Trapasiya; 06.02.2012
comment
@ankur.trapasiya Что касается ответа, см. Avahi для поддержки Zeroconf в Linux. - person ; 06.02.2012

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

person Ankur Trapasiya    schedule 06.05.2013