c # одноранговое программирование (желательно децентрализованное) - PullRequest
4 голосов
/ 22 декабря 2011

Я пишу приложение для обмена контентом. У вас есть список «сверстников». Вы выбираете несколько из них, и вы можете начать обмениваться контентом (текстовые и двоичные данные). В локальной сети, если вы введете IP-адрес других парней, связь может пройти.

У меня есть несколько вопросов

  1. Существует ли какой-либо шаблон для написания подобного чат-приложения, которое позволяет обнаруживать, кто в сети, а кто нет (как локально, так и в Интернете)? Я знаю, что это можно сделать с централизованным сервером, к которому все подключаются, но как насчет децентрализации, особенно когда вы находитесь в локальной сети?

  2. При подключении к онлайн-клиентам они в основном не имеют IP-адресов, а скорее находятся за брандмауэром и прочим, и, очевидно, IP-адрес не принадлежит машине, и некоторые порты будут заблокированы. Как обойти это?

PS: Я прочитал много страниц по стеку Некоторые говорят, что это возможно, другие говорят, что это не так. Теперь действительно уверен, какой взять. Некоторые даже имели информацию о торрент-клиентах и ​​серверах c # bit. Я очень открыт для предложений, пока я могу сделать это в .net. (c #, f #, vb все в порядке)

Любое предложение будет с благодарностью.

привет

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Обнаружение означает, что одна конечная точка должна быть в состоянии найти другие конечные точки. В локальной сети это возможно, если широковещательная передача (UDP) разрешена на сетевом уровне. Типичным сценарием является то, что диспетчер SNMP передает сообщение SNMP GET и видит, сколько агентов SNMP в одной сети отвечают. Это децентрализовано, так как нет центрального места регистрации, где хранится список всех конечных точек.

Однако выход за пределы локальной сети означает, что не существует простого способа, как радиовещание, найти другие конечные точки. Тогда требуется централизованное решение.

Поэтому, пожалуйста, суммируйте сценарии для ваших приложений на всех уровнях (приложение, сеть и т. Д.), Чтобы увидеть, доступно ли децентрализованное решение. Кроме того, когда вы где-то читаете выводы других, вы также должны обращать внимание на особые сценарии, на которые он ссылался. Эти выводы могут быть применимы только к этим сценариям.

0 голосов
/ 23 декабря 2011

Если вам нужен центральный сервер (registration.mydomain.com), то одно из следующих решений: 1. Одноранговые узлы подключаются к центральному серверу с сообщением «Я здесь, здесь мои данные».2. Сервер записывает IP-адрес и порт партнера.3. Пиры запрашивают список других пиров с сервера.4. Одноранговые узлы подключаются напрямую к другим одноранговым узлам с помощью предоставленного списка.

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

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

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