The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 15-Янв-10, 12:50  [смотреть все]
Задача:

На freebsd машине есть некое подобие шлюза реализованного таким образом
1) "сервер1" который принимает поток (файлы) по TCP от "клиент1".
2) "сервер2" который отдает поток принятый "сервер1" по TCP к "клиент2".

Вопрос: каким образом лучше организовать передачу потока от "сервер1" к "сервер2": "Unix socket" или "TCP через localhost" если учесть что доставка пакетов между клиентами должна быть 100% и нагрузка на сервер должна быть как можно меньше (таких передач одновременно будет очень много на очень больших скоростях).

Все пишется на С++ под FreeBSD 8.

Очень надеюсь на компетентный ответ или совет.

Заранее очень благодарен.

  • С++ и FreeBSD: Unix socket или TCP через localhost, !*! Pahanivo, 13:43 , 15-Янв-10 (1)
    >[оверквотинг удален]
    >socket" или "TCP через localhost" если учесть что доставка пакетов между
    >клиентами должна быть 100% и нагрузка на сервер должна быть как
    >можно меньше (таких передач одновременно будет очень много на очень больших
    >скоростях).
    >
    >Все пишется на С++ под FreeBSD 8.
    >
    >Очень надеюсь на компетентный ответ или совет.
    >
    >Заранее очень благодарен.

    общеизвестный факт что через сокет быстрее )) нет накладных расходов TCP

    • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 15:09 , 15-Янв-10 (2)
      >
      >общеизвестный факт что через сокет быстрее )) нет накладных расходов TCP

      а как надежность?

      гарантирует ли Unix Socket доставку "пакетов"?

      • С++ и FreeBSD: Unix socket или TCP через localhost, !*! Michael, 15:31 , 15-Янв-10 (3)

        >гарантирует ли Unix Socket доставку "пакетов"?

        а гарантирует ли pipe доставку данных?

        вопрос из той же серии

        • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 17:43 , 15-Янв-10 (4)
          >
          >>гарантирует ли Unix Socket доставку "пакетов"?
          >
          >а гарантирует ли pipe доставку данных?
          >
          >вопрос из той же серии

          всмысле?

          TCP - гарантирует. UDP - нет.

          по Unix Socket - не нашел точного утверждения. в этом и вопрос.

          • С++ и FreeBSD: Unix socket или TCP через localhost, !*! Michael, 17:52 , 15-Янв-10 (5)

            >TCP - гарантирует. UDP - нет.

            TCP, UDP - это транспортный уровень
            unix socket там не причем

            • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 17:57 , 15-Янв-10 (6)
              >
              >>TCP - гарантирует. UDP - нет.
              >
              >TCP, UDP - это транспортный уровень
              >unix socket там не причем

              поэтому я и написал слово пакеты как "пакеты". меня интересует надежность доставки у него такая же как у TCP или нет. допускает ли он потери данных по своей спецификации?

              • С++ и FreeBSD: Unix socket или TCP через localhost, !*! jd, 18:37 , 15-Янв-10 (7)
                >>>TCP - гарантирует. UDP - нет.
                >>
                >>TCP, UDP - это транспортный уровень
                >>unix socket там не причем
                >
                >поэтому я и написал слово пакеты как "пакеты". меня интересует надежность доставки
                >у него такая же как у TCP или нет. допускает ли
                >он потери данных по своей спецификации?

                UDP не гарантирует доставку пакетов не потому, что он их специально про#@$%, а потому что при передаче по сети, какое-либо из промежуточных соединений может быть нарушено (и чем длиннее и сложнее маршрут, тем это вероятнее). TCP в этом случае перепосылает пакет по другому маршруту. То есть, если использовать UDP на двух машинах в одном ethernet-сегменте, к примеру, то тоже ничего никуда не потеряется и порядок следования пакетов нарушен не будет, но эти протоколы работают на другом уровне, независимо от физической конфигурации сети. К UNIX-сокетам, как уже говорили выше, всё это не имеет никакого отношения, потому что оба их конца находятся на одной машине и "потеряться" просто ничего не может. TCP вам стоит использовать только в том случае, если предполагается в будущем разнесение "сервер1" и "сервер2" на разные машины.

                • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 12:46 , 16-Янв-10 (10)
                  >[оверквотинг удален]
                  >может быть нарушено (и чем длиннее и сложнее маршрут, тем это
                  >вероятнее). TCP в этом случае перепосылает пакет по другому маршруту. То
                  >есть, если использовать UDP на двух машинах в одном ethernet-сегменте, к
                  >примеру, то тоже ничего никуда не потеряется и порядок следования пакетов
                  >нарушен не будет, но эти протоколы работают на другом уровне, независимо
                  >от физической конфигурации сети. К UNIX-сокетам, как уже говорили выше, всё
                  >это не имеет никакого отношения, потому что оба их конца находятся
                  >на одной машине и "потеряться" просто ничего не может. TCP вам
                  >стоит использовать только в том случае, если предполагается в будущем разнесение
                  >"сервер1" и "сервер2" на разные машины.

                  вот за этот совет огромное спасибо. наверно все таки будет Unix Socket  так как в ближайшее время разнесение не потребуется.

                  а почему я спрашивал и за TCP - у него есть два важных преимущества
                  1) осуществляет повторный запрос данных в случае потери пакета
                  2) устраняет дублирование пакетов

                  скорость через этот шлюз будет от 350-390 Мбит/с и дополнительно проверять целосность - не ахти. развечто по хеш сумме на спороне принявшего.

                  • С++ и FreeBSD: Unix socket или TCP через localhost, !*! аноним, 18:44 , 19-Янв-10 (13)
                    >а почему я спрашивал и за TCP - у него есть два
                    >важных преимущества
                    >1) осуществляет повторный запрос данных в случае потери пакета
                    >2) устраняет дублирование пакетов

                    Не читал остальной поток мыслей, но если вы спрашиваете про unix socket, значит работаете локально. Если работаете локально, использовать TCP - идиотизм, и означенные его преимущества таковыми не являются, потому что через сокеты вообще нет никаких пакетов, и вообще невозможна их потеря или дублирование. Плюс гораздо меньшие накладные расходы.

                    • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 19:22 , 19-Янв-10 (14)
                      >Не читал остальной поток мыслей, но если вы спрашиваете про unix socket,
                      >значит работаете локально. Если работаете локально, использовать TCP - идиотизм, и
                      >означенные его преимущества таковыми не являются, потому что через сокеты вообще
                      >нет никаких пакетов, и вообще невозможна их потеря или дублирование. Плюс
                      >гораздо меньшие накладные расходы.

                      tnx

              • С++ и FreeBSD: Unix socket или TCP через localhost, !*! Warhead Wardick, 20:50 , 15-Янв-10 (8) –1
                Мда ... вот кому то "повезёт" - от такого прохфессионала программу в продакшен :(

                И уж если с++ (все реальные кульЦхаккеры на нем пишут, правда?) - то быстрее всего будет SHM, но надёжность доставки у неё как посчитать я не знаю :)

                • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 12:36 , 16-Янв-10 (9)
                  >Мда ... вот кому то "повезёт" - от такого прохфессионала программу в
                  >продакшен :(
                  >
                  >И уж если с++ (все реальные кульЦхаккеры на нем пишут, правда?) -
                  >то быстрее всего будет SHM, но надёжность доставки у неё как
                  >посчитать я не знаю :)

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

                  тем более вопрос не о языке программирования, а принципе работы Unix сокетов. так что извените? но ваш коментарий совершенно бесполезный.

                • С++ и FreeBSD: Unix socket или TCP через localhost, !*! аноним, 18:41 , 19-Янв-10 (12)
                  >И уж если с++ (все реальные кульЦхаккеры на нем пишут, правда?) -
                  >то быстрее всего будет SHM, но надёжность доставки у неё как
                  >посчитать я не знаю :)

                  Вы совсем охренели считать нажедность доставки SHM и Unix сокетов? У них "надежность доставки" ровно такая же как "надежность присваивания переменной значения", потому что в обоих случаях это всего лишь запись в память.

  • С++ и FreeBSD: Unix socket или TCP через localhost, !*! Аноним, 11:27 , 21-Янв-10 (25)
    Автору посоветую все книги Ричарда Стивенса, признанного гуру UNIX-программирования и TCP/IP

    1. У. Ричард Стивенс, Стивен А. Раго
    UNIX. Профессиональное программирование
    Advanced Programming in the UNIX Environment
    Твердый переплет (2007)

    2. Уильям Стивенс
    Unix. Взаимодействие процессов
    UNIX Network Programming. Volume 2. Interprocess Communications

    3. У. Р. Стивенс, Б. Феннер, Э. М. Рудофф
    UNIX. Разработка сетевых приложений
    UNIX: Network Programming
    Твердый переплет (2007)


    ну и до кучи

    4. У. Ричард Стивенс
    Протоколы TCP/IP. Практическое руководство
    TCP/IP Illustrated, volume 1. The Protocols
    Мягкая обложка (2003)

  • С++ и FreeBSD: Unix socket или TCP через localhost, !*! vvvua, 11:22 , 30-Янв-10 (27)
    >На freebsd машине есть некое подобие шлюза реализованного таким образом
    >1) "сервер1" который принимает поток (файлы) по TCP от "клиент1".
    >2) "сервер2" который отдает поток принятый "сервер1" по TCP к "клиент2".
    >
    >Вопрос: каким образом лучше организовать передачу потока от "сервер1" к "сервер2": "Unix >socket" или "TCP через localhost" если учесть что доставка пакетов между клиентами должна >быть 100% и нагрузка на сервер должна быть как можно меньше (таких передач одновременно >будет очень много на очень больших скоростях).

    Так как проги-сервера 2, то стоит подумать о возможности масштабирования. Т.Е. о физическом разделении на 2 компа.
    Считаю, что лучше сделать 2 вида - unix socket и tcp. Либу использовать libev - там всего десяток строчек добавиться для поддержки 2-х типов сокетов. И клиентов за 10К можно подключить при правильном написании. Но может быть сложновато, придется повозиться...

    • С++ и FreeBSD: Unix socket или TCP через localhost, !*! tarpedo, 12:11 , 30-Янв-10 (28)
      >Считаю, что лучше сделать 2 вида - unix socket и tcp. Либу
      >использовать libev - там всего десяток строчек добавиться для поддержки 2-х
      >типов сокетов. И клиентов за 10К можно подключить при правильном написании.
      >Но может быть сложновато, придется повозиться...

      спасибо, я так и думаю делать, но на первых парах хватит и Unix Socket.
      пока курю сокеты в Java так как клиенты будут на ней.

      за libdev спасибо - посмотрю.

      p.s. жесть начнется когда SSL надо будет прикручивать :)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру