высокопроизводительный сервер RTSP - PullRequest
3 голосов
/ 15 февраля 2012

Я хочу реализовать высокопроизводительный rtsp-сервер, который должен обрабатывать vod-запрос - он обрабатывает только запрос сигнализации, ему не требуется потоковая передача медиа-файла.Я выполнил версию, написанную на Java, на основе сетевой инфраструктуры Mina, и производительность кажется не очень высокой.

Насколько я знаю, высокопроизводительный SIP-сервер (например, VoIP-сервер) написан на C (например, OpenSIPS, Kamailo). Должен ли я использовать C или C ++ для своего проекта, чтобы получить значительное улучшение производительности?

Кстати.Я нашел какое-то объяснение причины, по которой OpenSER написан на C его автором: «С другой стороны, сборщик мусора может вызвать много проблем при разработке приложений SIP на Java. Тяжело загруженный сервер, написанный на Java, перестает работать, когдасборщик мусора очищает память. Задержка, вызванная сборщиком мусора, может быть даже более 10 секунд. Такие задержки недопустимы "Это факт, который в настоящее время означает, что я должен использовать C тоже?

Ответы [ 3 ]

5 голосов
/ 15 февраля 2012

Здесь огромное количество переменных, язык не может быть определяющим фактором. Trustin Lee, автор MINA, позже создал Netty , который действительно предлагает очень высокую производительность. Сам Ли говорит , что у MINA "относительно низкая производительность" из-за сложности некоторых функций, которые она предлагает, слишком тесно связаны с ядром. Так что вы можете посмотреть на Нетти, прежде чем полностью переписать все.

Если вы используете JVM от Oracle, вы используете чрезвычайно оптимизированную систему времени выполнения, которая идентифицирует горячие точки в коде (отсюда и название «HotSpot») и агрессивно оптимизирует их во время выполнения. Уже давно можно сказать, ipso facto, что Java-код будет работать медленнее, чем C-код. Хорошо написанный, оптимизированный C-код, вероятно, превосходит эквивалентный Java-код в определенных избранных задачах, но обобщение оттуда, вероятно, больше не подходит, и, конечно, ваш код должен взять на себя несколько трудностей, которые JVM берет на себя вас с Java. Также обратите внимание, что есть несколько вещей, которые вы можете сделать, чтобы настроить сборщик мусора JVM , например, чтобы предпочесть последовательность и короткие паузы, а не длинные и длинные паузы.

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

3 голосов
/ 15 февраля 2012

Вы сравнили свой сервер RTSP с Wowza ? Wowza также написана на Java, если ваш rtsp-сервер имеет более низкую производительность, чем Wowza, я думаю, вы могли бы улучшить его производительность без изменения языка, в противном случае, если Wowza имеет аналогичную производительность с вашим сервером, это означает, что Java не может удовлетворить требования к производительности, возможно, вам следует рассмотреть возможность использования вместо этого c / c ++.

1 голос
/ 12 декабря 2012

Я создал свой собственный RtspServer на C #, и у меня нет проблем с потоковой передачей сотням клиентов.

http://net7mma.codeplex.com/

Code Project article @ http://www.codeproject.com/Articles/507218/Managed-Media-Aggregation-using-Rtsp-and-Rtp

Вы являетесьболее того, добро пожаловать принять / ссылку на дизайн(Лицензия Apache 2)

...