Потоковый API против Rest API? - PullRequest
25 голосов
/ 11 мая 2011

Каноническим примером здесь является API Twitter.Я концептуально понимаю, как работает REST API, по сути, это просто запрос к их серверу для вашего конкретного запроса, в котором вы затем получаете ответ (JSON, XML и т. Д.), Отлично.

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

Допустим, у меня была куча данных, и я хотел настроить потоковый API локально для использования другими людьми в сети (например, Twitter).Как это сделать, какие технологии?С этим может справиться Node JS?Я просто пытаюсь обернуть голову вокруг того, что они делают, чтобы это сработало.

1 Ответ

21 голосов
/ 11 мая 2011

API потока Twitter состоит в том, что это по сути длительный запрос, который остается открытым, данные помещаются в него по мере того, как он становится доступным.

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

Как вы уже догадались, модель Node.js подходит к идее потокового соединения гораздо лучше, чем, скажем, модель сервлета.И запросы, и ответы представляются как потоки в Node.js, но не занимают весь поток или процесс, а это означает, что вы можете продолжать помещать данные в поток до тех пор, пока они остаются открытыми, не связывая чрезмерные ресурсы (хотя этосубъективно).Теоретически, вы можете иметь много одновременных открытых ответов, связанных с одним процессом, и записывать каждый из них только при необходимости.

Если вы еще не просматривали его, HTTP-документы для Node.js может быть полезно.

Я бы также взглянул на клиент Twitter Technoweenie , чтобы посмотреть, как выглядит потребительский конец этого API с Node.js, В частности, функция stream () .

...