Ситуация:
У меня есть сервер Node.JS. NGINX ограничен размером запроса 5 МБ.
Мне нужно загрузить на сервер большие файлы (~ 15 МБ) с клиента, работающего в браузере.
Есть 3 экземпляра сервера, на котором работает БЕЗ разделяемой памяти / файловых систем.
Что я сделал:
Я использовал некоторые библиотеки, чтобы разбить файлы на куски (<5 МБ), отправив их на сервер. После успешной отправки последнего фрагмента на сервер клиент вызвал конечную точку сервера, чтобы сообщить о завершении, и затем произошло объединение фрагментов. Это работало, когда у меня был запущен один экземпляр сервера. Из-за распределения нагрузки и т. Д. Каждый запрос на отправку чанка может обрабатываться другим экземпляром сервера. Следовательно, фрагменты могут быть объединены неправильно. </p>
Решения, о которых я думал:
Наилучшим решением (на мой взгляд) было бы то, как передать чанки на сервер всего за один запрос, который обрабатывается только одним экземпляром сервера.
Stream API все еще экспериментальный. Я хотел бы попробовать, но не нашел хорошего примера для подражания. Я слышал, что Stream API на стороне клиента отличается от потока на Node.JS, и нужно сделать еще кое-что.
Я провел исследование Transfer-Encoding: chunked
заголовка HTTP. Кто-то сказал, что отправлять большие файлы было бы хорошо, но я не нашел хорошего рабочего примера, как этого добиться.
Я также подумал о WebSocket (или даже Socket.io), чтобы установить соединение с экземпляром сервера и переслать фрагменты. Однако некоторые читатели сказали мне, что WebSocket не был хорошим способом отправки больших файлов.
Вопрос:
Как я могу достичь цели отправки больших файлов одному экземпляру сервера наиболее эффективным способом?