На самом деле я создал Batch HTTP API, который получает массив JSON со многими различными запросами к нашему внутреннему серверу.Пакетный API просто вызывает все эти запросы к балансировщику нагрузки, ожидает возврата всех из них и возвращает новый JSON клиенту.
Клиент получает огромный ответ массива JSON со своими индексами вта же позиция, что и у запроса, поэтому легко узнать, какой ответ адресован для какого запроса.
Мотивация для этого API состояла в том, чтобы решить 5 одновременных подключений браузера и повысить производительность, поскольку Batch API имеет гораздо большепрямой доступ к серверу (между нами нет обратного прокси-сервера или SSL-сервера).
Служба работает довольно хорошо, но теперь у меня есть некоторые новые требования, поскольку она получает все большее использование.Во-первых, служба может использовать много памяти, поскольку у нее есть буфер для каждого запроса, который будет сброшен только тогда, когда все ответы готовы (я использую упорядоченный массив JSON).Более того, поскольку для доставки всех запросов может потребоваться некоторое время, клиенту потребуется подождать, пока все будет обработано, прежде чем получать один байт.
Я планирую изменить службу так, чтобы она возвращала каждый ответ, как только он станет доступен.(и решить обе проблемы выше).И я хотел бы поделиться и подтвердить мои идеи с вами:
- Я изменю ответ с ответа JSON на ответ, состоящий из нескольких частей.
- Сервер будет включать для каждой части индекс ответа
- Сервер сбрасывает ответ, как только он становится доступным
- Клиентский XHR должен будет понимать составное содержимоевведите ответ и сможете обрабатывать каждую часть, как только она станет доступна.
Я создам PoC для проверки каждого шага, но в этот момент я хотел бы подтвердить идею и услышать некоторые мыслиоб этом.Вот некоторые сомнения, которые у меня есть по поводу решения:
- Из того, что я прочитал, я сомневаюсь, что тип контента подходит для ответа.многочастному / смешанная?multipart / digest?
- Можно ли использовать заголовок запроса на принятие, чтобы определить, способен ли клиент обрабатывать реализацию новой службы?Если да, то как правильно принять заголовок для этого?Я планирую использовать ту же конечную точку, но с очень приемлемым заголовком.
- Как мне разработать клиент XHR, способный обрабатывать многие части одного ответа, как только они станут доступны?Я нашел некоторые идеи в Интернете, но я не совсем уверен в этом.