2012-05-26 8 views
0

Мне очень нравится: http://services.digg.com/2.0/streamКак работает Streaming API Digg?

Данные непрерывно принимаются с использованием одного соединения, тип контента - это приложение/json. Кроме того, он может использоваться браузером. Как это реализовано? Глядя на around, похоже, что это не длинный опрос, события, отправленные сервером HTML5 или даже веб-сайты.

Как я могу построить что-то подобное? Есть ли какие-либо решения с открытым исходным кодом, которые я могу использовать в качестве отправной точки?

Спасибо,

/David

ответ

2

Это просто поток байт, передаваемых с фрагментированным кодированием передачи. По сути, это просто потоковая передача HTTP.

Поскольку вы упомянули события, отправленные сервером, вы можете думать об этом как SSE без специального форматирования. Сообщения - это объекты JSON, ограниченные символом новой строки. На сервере вы можете реализовать это так же, как и для форматирования SSE минус.

Клиент для такого API должен иметь возможность анализировать такой поток данных и разделить сообщения на новой строке. Некоторые браузеры поддерживают readyState из 4 на XMLHttpRequest, который вызывается для каждого фрагмента, что позволяет обрабатывать потоковые данные.

+0

Привет, Игорь, благодарю вас за ответ. Существуют ли какие-либо причины против кодирования передаваемых пакетов и для SSE в контексте создания потокового API? –

+0

Конечно, если ваш API не предназначен для браузеров, вы можете просто использовать куски. В этих вариантах использования их проще анализировать, чем протокол EventSource. Еще одна вещь, которую стоит рассмотреть, - междоменная связь. Многие из реализаций EventSource не имеют поддержки для совместного использования ресурсов CORS (Cross-origin) или только что получили его. В то время как с AJAX поддерживается везде. Это еще один случай, когда это может быть вариант. – igorw

+0

Еще раз спасибо, поэтому API Digg работает в большинстве браузеров как документ верхнего уровня, хотя он использует куски. Вы говорите, что, возможно, он не может быть использован с помощью XMLHttpRequest? –