2015-03-02 3 views
1

Я работаю над проектированием API для потребления сообщений из приложения, которое будет генерировать очень большой объем данных; Вероятно, 10+ GB/s, даже для небольших клиентов. Я ищу протокол, который позволяет мне предоставлять эти данные таким образом, чтобы клиенты могли потреблять их.Протокол отправки потоковых данных по нескольким сокетам

Очевидным ответом для меня является: разделение сообщений, чтобы они могли потреблять несколько соединений. Каждое соединение будет потреблять часть общей нагрузки.

Но если я делаю это, есть несколько вещей, которые мне нужно учитывать:

  • Как пользователь знают, что они отстали и нужно запустить несколько соединений?
  • Когда они запускают новое соединение потреблять больше данных, как они указывают, что это является частью той же сессии потребления?
    • Мы могли бы дать сеансу имя, соотносить, что с "direct" amqp queue, и пусть наша очередь делать тяжелую работу
  • Есть что-то очень важно, мне не хватает.
    • Возможно.

По этой причине, я бы много, а протокол, который уже существует.

Протокол будет считаться дополнительный удивительным, если:

  • является WebSocket или потоковой HTTP дружественный
  • поддерживает сжатие

ответ

1

данных Проблемы вы описываете в значительной степени то же самое проблемы, с которыми вам приходится иметь дело с потоками видео, которые вы, вероятно, уже знаете. Ключевыми протоколами HTTP, поддерживающими HTTP, являются HLS (Apple), SmoothStreaming (Microsoft), HDS (Adobe) и MPEG-DASH (открытый протокол, но новый).

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

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

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

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

Конечная точка - протоколы потоковой передачи видео и аудио, как правило, имеют встроенный способ работы с задержанными или потерянными пакетами. В зависимости от вашего приложения они могут быть неприменимы к вам, поэтому вам следует внимательно изучить этот аспект, если вы повторно используете протокол передачи видео или звука или сервер. Например, аудиоклиенты обычно терпимы к небольшому количеству потерь пакетов и, как правило, отбрасывают задержанные пакеты, а не приостанавливают аудио (пакеты, полученные за пределами окна «буфер дрожания»). Если ваше приложение не может терпеть потерю пакетов, вам необходимо внимательно изучить основное решение и протокол, чтобы убедиться, что он действительно соответствует вашим потребностям во всех сетевых условиях.

+0

Благодарим за это. Когда я изначально искал решения, потоковые видео-протоколы продолжали появляться. Для нашего конкретного решения точность в потоке данных довольно важна (что более важно, чем абсолютная производительность), поэтому более медленные протоколы могут оказаться не лучшим. Тем не менее, есть некоторые идеи, в которых мы должны уметь брать деньги. – turtlemonvh

Смежные вопросы