WebSockets vs XHR для больших объемов данных

Я запускаю SocketIO на NodeJS, и мне не очень-то нравится поддержка широких браузеров, так как это мой любимый проект, где я хочу использовать всю мощь новых технологий для облегчения разработки. Моя забота о том, как я должен отправлять большие объемы данных JSON с сервера на клиент и обратно. Ну, эти суммы не так велики, как могут быть для двоичных данных видео или изображений, я полагаю, что не более сотни килобайт за запрос.

Два сценария, которые я вижу, следующие:

  • Отправлять уведомление через WebSockets с сервера на клиент, чтобы некоторые данные были получены. Затем клиентский код запускает обычный запрос XHR на сервер и получает некоторые данные через XHR.
  • Отправка всего набора данных через WebSockets от сервера к клиенту. В этом случае мне не нужно запускать какие-либо дополнительные запросы - я просто получаю все данные через WebSockets.

Я видел первый случай в Meteor.js, поэтому я задавался вопросом о причинах этого. Пожалуйста, поделитесь своим мнением.

Ответ 1

Websockets должны поддерживать большие наборы данных (теоретически до 16 экзабайт), поэтому с этой точки зрения он должен работать нормально. Преимущество XHR заключается в том, что вы сможете наблюдать прогресс со временем и в целом лучше тестировать на большие блоки данных. Например, я видел реализации сервера websocket, которые (думая ретроспективно) не будут обрабатывать большие данные, потому что они будут загружать все данные в память (а не передавать данные), но это, конечно же, не обязательно для сокета. io (dunno). Точка в случае: попробуйте с socket.io, наблюдая за использованием памяти и ее стабильностью. Если это сработает, обязательно пойдите с websockets, потому что в долгосрочной перспективе поддержка больших пакетов данных будет только улучшаться и определенно не хуже. Если он окажется нестабильным или если socket.io не может передавать большие файлы данных, используйте конструкцию XHR.

Btw, только поиск google появился siofile, так и не заглянул в него, но это может быть просто вещь вам нужно.