Как работает потоковая передача данных через Интернет? - PullRequest
2 голосов
/ 10 декабря 2010

Это может быть любой тип фида данных, скажем так, для данного примера данных о фондовом рынке, так как он является популярным. Но я говорю о каналах данных в реальном времени. Таким образом, он непрерывно отправляет данные.

Я пытаюсь понять, как это реализовано. Это происходит каким-то образом через http? Я просто не понимаю, как клиенты подключаются к серверу, а сервер отправляет непрерывные данные, кто-нибудь может подсказать мне, как это работает технически? Как клиент может подключиться к серверу? Давайте возьмем C # или Java или что-то. Это происходит через http или, может быть, каким-то другим способом? пожалуйста, войдите в детали.

Спасибо

1 Ответ

2 голосов
/ 10 декабря 2010

На самом деле он ничем не отличается от обычного HTTP-трафика, только дольше.

Что происходит, когда вы открываете сайт? (очень грубый обзор)

  1. Ваш компьютер связывается с сервером, устанавливает соединение.
  2. Сервер начинает отправлять вам данные, разбитые на пакеты.
  3. Ваш компьютер получает пакеты, возможно, не в порядке, а некоторые со значительной задержкой, и повторно собирает их в веб-сайт.
    • Ваш компьютер отправляет подтверждение для полученных пакетов.
    • Сервер будет повторно передавать любые пакеты, в течение которых он не получал подтверждения в течение значительного времени, при условии, что они были отброшены в пути.
    • Между получением пакетов и / или подтверждений оба ждут.
  4. Когда все данные, необходимые для отображения сайта, передаются, ваш компьютер благодарит сервер за его время и отключается.

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

Что происходит с «потоковыми потоками данных»? (даже более грубый обзор)

  1. Клиент связывается с сервером, устанавливая соединение.
  2. Сервер начинает отправлять данные, разбитые на пакеты, клиенту.
  3. Клиент получает пакеты, возможно, не в порядке, а некоторые со значительной задержкой, и повторно собирает их.
    • Клиент отправляет подтверждение для полученных пакетов.
    • Сервер будет ретранслировать любые пакеты, в течение которых он не получал подтверждения в течение значительного времени, при условии, что они были отброшены в пути.
    • Между приемом пакетов и / или подтверждений оба ждут.

Единственное отличие состоит в том, что клиент не зависает на сервере, потому что он все еще ожидает данные, и оба не так быстро разрывают соединение.

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

while (true) {
    echo '.';
    sleep(1);
}

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

Попробуйте статью Википедии о TCP / IP для ознакомления с основами и эту статью о длинном опросе / потоковой передаче HTTP для конкретных примеров.

...