Как перенести существующее приложение udp в необработанные сокеты - PullRequest
1 голос
/ 31 мая 2010

Есть ли руководство по переходу с простых сокетов udp (используется linux, C99 / C ++, recv syscall) на необработанные сокеты?

Согласно http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html RAW сокет намного быстрее, чем UDP.

Приложение клиент-сервер. Клиент является проприетарным и должен использовать тот же протокол, что и с сервером udp. Но сервер может быть немного быстрее с необработанными сокетами. Какие части УДП я должен реализовать на сервере? Есть ли «быстрая миграция» библиотек?

1 Ответ

1 голос
/ 05 июня 2010

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

В этом случае вы упоминаете, что сервер написан для использования протокола Udp, поэтому в сети связи должны быть Udp. Теперь, если вы собираетесь использовать необработанный сокет, вам нужно будет обязательно отправить данные вашего приложения, инкапсулированные в пакет Udp. Вам также нужно будет написать код, чтобы убедиться, что вы подчиняетесь протоколу UDP и конечному автомату, чтобы на сервере ваш клиент представлялся просто как другой клиент UDP. Выполнение всего этого требует написания большого количества кода и имеет некоторые недостатки, связанные с повышенным техническим обслуживанием, повышенными затратами на правильную работу и т. Д.

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

По-моему, вы должны сначала попытаться выяснить, почему ваш клиент такой медленный. Каковы ваши требования? Есть ли у вас какие-либо показатели относительно того, что представляет собой хороший, быстрый клиент? Если бы я был вами, я бы сначала измерил текущую реализацию, имея в виду некоторые метрики, которые полезны для сценария, например, количество переданных байт / сек и т. Д. Затем я бы профилировал клиента, чтобы увидеть, где он тратит слишком много времени, и попытаться выяснить, смогу ли я уменьшить накладные расходы и сделать это намного быстрее.

Подводя итог, найдите сбережения в верхней части стека (т. Е. В вашем приложении), прежде чем спускаться в стек. Если ваше приложение написано не очень хорошо, то, независимо от того, насколько низко вы пойдете, вы не увидите ожидаемой производительности.

...