2013-04-29 4 views
0

Я читал эту post от Алекса Maccaw, где он заявляет:spine.js: Это действительно «конвейерные» POST?

Последняя проблема связана с запросами Ajax, которые посылают параллельно. Если пользователь создает запись, а затем сразу же обновляет одну и ту же запись, два запроса Ajax будут отправляться одновременно, POST и PUT. Однако, если сервер обрабатывает запрос «update» до «create», он будет волноваться. Он не имеет понятия, какая запись нуждается в обновлении, поскольку запись еще не создана.

Решение этого вопроса заключается в запросах Ajax трубопровода, передающих их серийно. Spine делает это по умолчанию, ставя в очередь POST, PUT и DELETE Запросы Ajax, поэтому они отправляются по одному. Следующий запрос отправляется только после того, как предыдущий успешно вернулся.

Но HTTP спецификации Sec 8.1.2.2 Pipelining говорит:

Клиенты НЕ СЛЕДУЕТ запросы трубопроводов с использованием методов, не идемпотентные или без идемпотентные последовательности методов (смотри раздел 9.1.2). В противном случае преждевременное прекращение транспортного соединения может привести к неопределенным результатам.

Итак, действительно ли «трубопровод» на самом деле «трубопровода»?

ответ

3

Использование Maccaw термина «конвейерная обработка» и спецификация HTTP здесь не одинаковы. На самом деле, они противоположны.

В спецификации HTTP термин «конвейерная обработка» означает отправку нескольких запросов без ожидания ответа. See section 8.1.2.2.

Клиент, который поддерживает постоянные соединения МОЖЕТ «конвейерную обработку» запросов (т.е. посылать несколько запросов, не дожидаясь каждого ответа).

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

Когда Maccaw пишет о SPINE в «конвейерная», он на самом деле имея в виду раствора к тому, что клиент «трубопроводные» запросы, не дожидаясь ответа, согласно HTTP спецификации. То есть, spinejs будет ставить в очередь запросы и отправлять их поочередно, каждый последовательный запрос выполняется только после завершения его предшественника.

+0

Итак, spinejs достигает такого же эффекта, как и то, что мы получим, если «HTTP-конвейеризация» должна быть отключена? Если да, разве мы не можем отключить «конвейерную обработку HTTP», а не включать его, а затем отключить его с помощью spinejs? (Я не знаю, можем ли мы программно отключить «конвейер HTTP», хотя). – brainOverflow

+1

Можно сказать, что да. По его словам, он ставит в очередь запросы и выполняет их только после завершения предыдущего, то есть позвоночник делает только один пост/сообщение/удаление за раз. HTTP-конвейеризация - это функция браузера, даже если вы можете отключить ее (возможно, вы, возможно, ограничиваете одновременные запросы в firefox), вы не можете заставить пользователей делать это. И, кроме того, spinejs использует «конвейер» как механизм управления, или, как кажется, по описанию, только делает следующий запрос, если предыдущий преуспевает. – numbers1311407

+1

Плюс, я уверен, что «конвейеры» позвонков «GET», и, что более важно, вы ***, вероятно, не хотите, чтобы ваше веб-приложение запрашивало только один файл за раз с вашего сервера. – numbers1311407

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