#api #twitter #node.js #streaming
#API #Twitter #node.js #потоковое вещание
Вопрос:
Каноническим примером здесь является API Twitter. Я концептуально понимаю, как работает REST API, по сути, это просто запрос к их серверу для вашего конкретного запроса, в котором вы затем получаете ответ (JSON, XML и т.д.), Отлично.
Однако я не совсем уверен, как работает streaming API за кулисами. Я понимаю, как это использовать. Например, с помощью Twitter прослушайте ответ. Из ответа прослушиваются данные, в которых твиты поступают фрагментами. Создайте фрагменты в строковом буфере и дождитесь перевода строки, который означает конец твита. Но что они делают, чтобы это заработало?
Допустим, у меня была куча данных, и я хотел настроить потоковый API локально для использования другими людьми в сети (точно так же, как Twitter). Как это делается, какие технологии? Это то, с чем может справиться Node JS? Я просто пытаюсь разобраться в том, что они делают, чтобы заставить эту штуку работать.
Ответ №1:
Stream API Twitter заключается в том, что это, по сути, длительный запрос, который остается открытым, данные загружаются в него по мере того, как они становятся доступными.
Следствием этого является то, что сервер должен будет иметь возможность обрабатывать множество одновременных открытых HTTP-подключений (по одному на клиента). Многие существующие серверы не справляются с этим должным образом, например, движки Java servlet назначают один поток на запрос, что может (а) стать довольно дорогим и (б) быстро превысить нормальную настройку max-threads и предотвратить последующие подключения.
Как вы уже догадались, Node.js модель соответствует идее потокового соединения намного лучше, чем, скажем, модель сервлета. Оба запроса и ответы отображаются в виде потоков в Node.js , но не занимают весь поток или процесс, что означает, что вы могли бы продолжать передавать данные в поток до тех пор, пока он остается открытым, не затрачивая чрезмерных ресурсов (хотя это субъективно). Теоретически вы могли бы иметь множество одновременных открытых ответов, подключенных к одному процессу, и записывать в каждый из них только при необходимости.
Если вы еще не просмотрели это, HTTP docs для Node.js может быть полезно.
Я бы также взглянул на клиент technoweenie в Twitter, чтобы посмотреть, как выглядит пользовательская часть этого API с Node.js в частности, функция stream().