Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > Peer2Peer


Автор: ShurikA 7.11.2006, 17:52
Доброе время суток всем.

Я уже кучу времени капаюсь в нете с целью понять принцип работы Peer2Peer подключения, передачи данных и т.д.
То как я себе это предтавлял до того:
1. Клиент запраживае кто залогинин на сервере и всё что с каждим таким подключённым связанно (на пример IP).
2. Открывается сокетное соединение с другим клиентом пользуясь ранее полученым IP.
3. и дальше делай что хочешь обходя сам сервер.

после всего того что я выкопал в нете:
http://www.onjava.com/pub/a/onjava/2003/12/03/p2psockets.html
http://java.sun.com/developer/technicalArticles/peer/
http://www.jxta.org
и ещё много другого,

Я понял что я уже ничего не понял...
Во всяком случае то что там описанно, это что п[о любому вся информация проходит через сервак.   smile  smile 

Автор: sergejzr 7.11.2006, 18:14
Просто существуют разные архитектуры P2P. Например Napster'у нужен центральный сервер. BitTorrent обходится вообще без серваков. А в Minerva'е, существует подархитектура hypercube с точками, которые отвечают за основной трафф. У YaCy пиры делятса на "начинающих", продвинутых и Senior. В зависимости от статуса у них также больше/меньше прав.

Автор: ShurikA 7.11.2006, 18:30
sergejzr, 
ууу как всё запущенно!!!!!!!
Ладно, тогда спрошу так:
Нужет Р2Р так что бы минимально задействовался сервак но при этом велась история действий...

Добавлено @ 18:31 
и как кстати назуваются эти разные архитектуры? если у них вообще есть название...

Автор: sergejzr 7.11.2006, 18:42
Есть у некоторых.. у minervа -  hypercube. Кстати она как раз самая "научная". Так сказать - ребёнок исследований, в то время, как остальные сделаны впринципе фрилансерами. А там сам пони9маешь.. кто как назовёт smile Есть ещё PGrid, но про него пока вообще не могу сказать ничего. Он новый и займусь им наверное во второй половине года. Я диплом писал на основе http://www.yacy-websuche.de/.

А пока сам с minerva буду разбираться http://www.mpi-sb.mpg.de/departments/d5/software/minerva/. Вроде весьма солидный софт.


Автор: ShurikA 7.11.2006, 18:48
А как на счёт JXTA?

Автор: sergejzr 7.11.2006, 18:50
Не смотрел, но думаю, если у нас около 60 человек работают с P2P и никто не посоветовал, то наверное не стоит заниматься..

Автор: ShurikA 7.11.2006, 18:59
Цитата(ShurikA @  7.11.2006,  17:48 Найти цитируемый пост)
А как на счёт JXTA? 

Это библиотека для Р2Р под JAVA...

вот нащёл я такую вещь: http://www.webopedia.com/DidYouKnow/Internet/2005/peer_to_peer.asp
где написанно так:
Цитата

A second model of P2P clients works in the same way but without a central indexing server.  In this scenario the P2P software simply seeks out other Internet users using the same program and informs them of your presence online, building a large network of computers as more users install and use the software. 


вот это то что мне и нужно...
Куда капать?

Автор: sergejzr 7.11.2006, 19:08
Вопрос в том, что копать? indexing server и архитектура - немного разные вещи. Чего ты от системы хочешь?

Автор: ShurikA 7.11.2006, 19:11
Начать хочу с простого мессенжера пересылая сообщения не через сервер (это множно сделать и на базе сервлета) а на прамик от клиента к клиенту, а сервак задействовать только для хранения истории...

Добавлено @ 19:21 
и ещё одно в чё приемушество в пользовании Р2Р над обычным сервлетом?

Автор: sergejzr 7.11.2006, 19:34
Это две разные вещи.

Добавлено @ 19:35 
Цитата(ShurikA @  7.11.2006,  18:11 Найти цитируемый пост)
на прамик от клиента к клиенту, а сервак задействовать только для хранения истории...

Ну на сервер по любому придётся сообщения отправлять. А вообще идея неплохая.

Автор: ShurikA 7.11.2006, 19:47
Цитата(sergejzr @  7.11.2006,  18:34 Найти цитируемый пост)
Ну на сервер по любому придётся сообщения отправлять.

Но это будет происходить не свазанно, и соответственно от сервака не будет зависить отправка сообщений, уже не говоря о том случе когда нужно будет переправить фаил.


Цитата(sergejzr @  7.11.2006,  18:34 Найти цитируемый пост)
Это две разные вещи.

Ну почему же, оба способа могут связуваться в сервером. Или я чего то не понимаю?
Если да то я полностью запутался. Чем отличается Р2Р от сервлета?

Автор: sergejzr 7.11.2006, 19:54
В P2P каждый peer - клиент и сервер одновременно. Все пиры равнозначны. Никакого "сервлета" там нет. Или ты собираешься каждому юзеру чата tomcat устанавливать? smile 

Автор: ShurikA 7.11.2006, 20:51
Цитата(sergejzr @  7.11.2006,  18:54 Найти цитируемый пост)
В P2P каждый peer - клиент и сервер одновременно

Так всё, окончательный тупик  smile 
Есть гдето нормальная литература, типа для чайников?

Автор: COVD 7.11.2006, 20:56
Цитата

Есть гдето нормальная литература, типа для чайников?


Почитайте про Socket и ServerSocket

Автор: LSD 7.11.2006, 22:09
Насчет BitTorrent это не совсем так. 
BitTorrent не может работать без сервера. Это или должен быть центральный сервер (трекер) или распределенная сеть в которой каждый узел минитрекер. Трекер не держит у себя данных, и через него данные не передаются, он только помогает клиентам установить между собой соединение и следит за переданым/скачаным трафиком (так называемый UP/DOWN ratio). На самом деле BitTorrent весьма хорошо продуманная сеть, и создавалась как средство централизованной раздачи больших файлов, как-то дистрибутивы Linux (http://torrent.fedoraproject.org/). Даже MS хотели в свое время раздавать бету Висты через торенты, когда у них от нагрузки стали падать серваки.
Для BitTorrent есть неплохой Java - OpenSource клиент http://azureus.sourceforge.net/.

Автор: ShurikA 7.11.2006, 22:34
LSD, 
sergejzr, Народ, вы всё вокруг да около...
То что такие проги есть я не сомнивался, вопрос как их самому написать?
Только не для передачи фаилов, а в качестве мессенгера (для начала во всяком случае).

Добавлено @ 22:36 
Для начало: 
1. Что такое Р2Р?
2. где можно прочесть онлайн его азы?

Добавлено @ 22:39 
LSD, кстати задумка у меня была такая как в БитТорент.

Автор: LSD 7.11.2006, 22:46
Общие принципы BitTorrent можно почитать http://www.computerra.ru/hitech/37124/ и http://ru.wikipedia.org/wiki/BitTorrent. Подробное описание протокола на http://www.bittorrent.com/.

Автор: ShurikA 7.11.2006, 22:51
LSD, 
Ладно ещё раз перефомулирую себя:
Если я хочу добиться обычного месенжера и я не хоцу пользоваться сервлетом,
Какие ещё варианты существуют так что бы обращения на сервак были минимальными?
извините за занудство, но я торможу

Автор: LSD 7.11.2006, 23:31
Я вижу только 2 варианта:
1. Сервак держит у себя только список клиентов и их IP. По запросу клиента выдает IP интересующего его клиента. Клиенты взаимодействуют напрямую, без какого либо участия сервера. Проблему аутентификации надо решать исходя из того какой уровень безопастности требуется в системе.
2. Полностью децентрализованная система: сервак держит у себя только список некоторых клиентов, и при необходимости может обратится к ним с запросом. К каждому клиенту можно обратится с запросом на поиск определенного клиента, и он может обратится с подобным запросом к любому клиенту. Этот вариант более сложный и требует хорошей теоретической проработки.

Автор: ShurikA 7.11.2006, 23:42
ОКsmile
имеется в виду 1 вариант.
В связи с этом 2 вопроса:
1. 
Цитата(LSD @  7.11.2006,  22:31 Найти цитируемый пост)
По запросу клиента выдает IP интересующего его клиента.

Это делать через сервлет, или есть ещё способы?
2.
Цитата(LSD @  7.11.2006,  22:31 Найти цитируемый пост)
Клиенты взаимодействуют напрямую

Каким образом?

ещё раз извиняусь за такое количество вопросов, я в этом полнуй 0.
Начал читать про сокеты и серверсокет, пока что всё вроде ясно но не понятно как я этим могу воспользоваться для моей цели.

Автор: LSD 7.11.2006, 23:55
1. Можно и через сервлет, а можно и без него. Если есть задача написать свою IM систему, то можно реализовать свой сервер и без сервлетов, и работать будет не медленней.
2. Опять же зависит от требований к системе:
  • RMI - просто и удобно программировать, сервер упрощается до предела, но все клиенты должны быть на Java
  • свой протокол на базе TCP/IP - клиенты могут быть написаны на чем угодно, надо придумывать свой протокол
  • использовать готовый протокол,  например Jabber - проверенное временем решение, есть готовые библиотеки, придется переделывать его под свои нужды (в частности под работу минуя сервер)

Автор: ShurikA 7.11.2006, 23:59
Цитата(LSD @  7.11.2006,  22:55 Найти цитируемый пост)
1. Можно и через сервлет, а можно и без него. Если есть задача написать свою IM систему, то можно реализовать свой сервер и без сервлетов, и работать будет не медленней.

Ты имеешь в виду создать свой протокол и гонять его через Socket<->ServerSocket?


Цитата(LSD @  7.11.2006,  22:55 Найти цитируемый пост)
2. Опять же зависит от требований к системе...

Неужели каждый клиент должен дыть в там случе и цлиентом и сервером одновременно?

Автор: LSD 8.11.2006, 00:04
Цитата(ShurikA @  7.11.2006,  23:59 Найти цитируемый пост)
Ты имеешь в виду создать свой протокол и гонять его через Socket<->ServerSocket?

Да.

Цитата(ShurikA @  7.11.2006,  23:59 Найти цитируемый пост)
Неужели каждый клиент должен дыть в там случе и цлиентом и сервером одновременно?

В каком-то смысле да, т.е. он в должен будет уметь принимать входящие соединения и устанавливать исходящие (что при наличии NAT, Proxy, Firewall может стать проблемой), плюс аутентифицировать клиентов (может быть с помощью сервера).

Автор: ShurikA 8.11.2006, 00:12
ОК
Последний вопрос (на сегодняsmile):
Так как через Socket<->ServerSocket всё происходит через OutputStream/InputStream, через них и нужно гонят все команды протокола, или же есть способ более элегантный?

Добавлено @ 00:13 
и ещё: каким , на промер образом можно аутентифицировать клиентов ?

Автор: LSD 8.11.2006, 11:57
Цитата(ShurikA @  8.11.2006,  00:12 Найти цитируемый пост)
Так как через Socket<->ServerSocket всё происходит через OutputStream/InputStream, через них и нужно гонят все команды протокола, или же есть способ более элегантный?

Нету. Если протокол твой собственный, то и его реализация лежит на тебе, впрочем это не так сложно.


Цитата(ShurikA @  8.11.2006,  00:12 Найти цитируемый пост)
и ещё: каким , на промер образом можно аутентифицировать клиентов ?

Простейший способ: по IP. Клиент регистрируется на сервере по логину и паролю. А потом любой может запросить сервер, что клиент с таким логином имеет такой IP.

Автор: ShurikA 8.11.2006, 12:30
Цитата(LSD @  8.11.2006,  10:57 Найти цитируемый пост)
...впрочем это не так сложно

На пример?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)