Асинхронные сокеты в избранное  новое горячее всё    подписка   модер. 
От: Аноним 833 
Дата: 18.03.10 16:42
Доброго времени суток.
Возникла необходимость написать сервер на асинхронных сокетах под Linux. Язык реализации C++.
Задача у сервер простая — принять пакет на сокете A отправить его на сокет B.
Правильно ли я понимаю что асинхронные и неблокирующие сокеты это одно и тоже?
Сервер должен выдерживать большую нагрузку 5000-10000 клиентов.
Также возник вопрос как реализовать n асинхронных сокетов на один поток, для респределения нагрузки по потокам.
У меня есть оптыт сетевого программирования под Win и под Linux, но до этого писал только на блокирующих сокетах.
Где можно прочитать про асинхронные сокеты, простые примеры с ними и найти пример с n сокетов на поток?
Буду рад любой помощи по теме. Заранее спасибо!
Re: Асинхронные сокеты в избранное  новое    модер. 
От: -prus- 
Дата: 18.03.10 16:56
Здравствуйте, Аноним, Вы писали:

А>Где можно прочитать про асинхронные сокеты, простые примеры с ними и найти пример с n сокетов на поток?

А>Буду рад любой помощи по теме. Заранее спасибо!

Книжки:
1. UNIX. Разработка сетевых приложений (У. Р. Стивенс, Б. Феннер, Э. М. Рудофф)
2. Шон Уолтон. Создание сетевых приложений в среде Linux. 2001
С уважением,
Евгений
Re: Асинхронные сокеты в избранное  новое    модер. 
От: Temotohttp://temoto.ru/
Дата: 18.03.10 17:02
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток.

А>Возникла необходимость написать сервер на асинхронных сокетах под Linux. Язык реализации C++.
А>Задача у сервер простая — принять пакет на сокете A отправить его на сокет B.

Для такой задачи не надо ничего писать. Есть готовый софт. Гуглить port forward.

И уж точно не надо насиловать себя C++ ом. Вот ваша задача, решённая в 10 строк на питоне. http://eventlet.net/doc/examples.html#port-forwarder

А>Правильно ли я понимаю что асинхронные и неблокирующие сокеты это одно и тоже?


Да.

А>Сервер должен выдерживать большую нагрузку 5000-10000 клиентов.


Это всё равно что "мне нужен мощный компьютер, выдерживающий большую нагрузку 20 фотошопов". Нагрузка это количество запросов/пакетов в секунду, а не количество возможно спящих клиентов.

А>Также возник вопрос как реализовать n асинхронных сокетов на один поток, для респределения нагрузки по потокам.


Не получится никакого распределения нагрузки по потокам, потому что нагрузки на процессор в вашей задаче нет.
В программе, которая работает только с сетью OS потоки могут только мешать.

А>У меня есть оптыт сетевого программирования под Win и под Linux, но до этого писал только на блокирующих сокетах.

А>Где можно прочитать про асинхронные сокеты, простые примеры с ними и найти пример с n сокетов на поток?

Boost.asio, man socket, read, write.

А>Буду рад любой помощи по теме. Заранее спасибо!
Re[2]: Асинхронные сокеты в избранное  новое    модер. 
От: InstantI 
Дата: 18.03.10 17:12
Здравствуйте, Temoto, Вы писали:

T>Для такой задачи не надо ничего писать. Есть готовый софт. Гуглить port forward.


Дело в том что задача не настолько тривиальная как я написал. Решалось бы все просто пробросом портов, таких вопросов бы не возникло. Но вцелом картина принять на A отправить на B, прочитать ответ отправить на A. Это только вцелом. Повторюсь что готовых реализаций именно под мою ситуацию не существует.
Re[3]: Асинхронные сокеты в избранное  новое    модер. 
От: Nem 
Дата: 19.03.10 07:29
Попробуй действительно начать со Стивенса. Он понятно пишет.
Потом посмотри C10K и "FAQ appendix 1: как писать сервера" например здесь.

Общая идея достаточна тривиальна. У тебя есть куча сокетов, которые ты все скопом отдаешь одной функции (select/poll/epoll/kqueue). И когда хотя бы один из них перейдет в нужное тебе состояние (есть данные для чтения, можно посылать еще, etc) функция тебе сигнализирует.
Удобно использовать libevent или libev, чтобы самому не заморачиваться подробностями реализации всех методов (select/...).
Re: Асинхронные сокеты в избранное  новое    модер. 
От: abrec 
Дата: 20.03.10 08:49
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток.

А>Возникла необходимость написать сервер на асинхронных сокетах под Linux. Язык реализации C++.
А>Задача у сервер простая — принять пакет на сокете A отправить его на сокет B.
А>Правильно ли я понимаю что асинхронные и неблокирующие сокеты это одно и тоже?
А>Сервер должен выдерживать большую нагрузку 5000-10000 клиентов.
А>Также возник вопрос как реализовать n асинхронных сокетов на один поток, для респределения нагрузки по потокам.
А>У меня есть оптыт сетевого программирования под Win и под Linux, но до этого писал только на блокирующих сокетах.
А>Где можно прочитать про асинхронные сокеты, простые примеры с ними и найти пример с n сокетов на поток?
А>Буду рад любой помощи по теме. Заранее спасибо!

boost::asio!!!
Re: Асинхронные сокеты в избранное  новое    модер. 
От: abrec 
Дата: 20.03.10 08:51
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток.

А>Возникла необходимость написать сервер на асинхронных сокетах под Linux. Язык реализации C++.
А>Задача у сервер простая — принять пакет на сокете A отправить его на сокет B.
А>Правильно ли я понимаю что асинхронные и неблокирующие сокеты это одно и тоже?
А>Сервер должен выдерживать большую нагрузку 5000-10000 клиентов.
А>Также возник вопрос как реализовать n асинхронных сокетов на один поток, для респределения нагрузки по потокам.
А>У меня есть оптыт сетевого программирования под Win и под Linux, но до этого писал только на блокирующих сокетах.
А>Где можно прочитать про асинхронные сокеты, простые примеры с ними и найти пример с n сокетов на поток?
А>Буду рад любой помощи по теме. Заранее спасибо!

boost и для сокетов и для потоков и для процессов.