Ответ 1
Я думаю, что большинство ваших вопросов можно прояснить, поняв реальную цель WebSockets. WebSockets не предназначалась в первую очередь для замены каких-либо вещей, которые уже существуют и хорошо работают. Например, он не был спроектирован как низкозатратная версия AJAX. Целью является предоставление двунаправленного, малогабаритного, полного дуплекса, канала связи между браузером и сервером. Реальная цель заключается в том, чтобы включить новый домен веб-приложений или улучшить существующие, которые злоупотребляют HTTP для достижения двунаправленной связи.
С учетом этого позвольте мне прокомментировать ваши пункты:
-
Назначение периодических сообщений ping/pong для WebSockets выполняется в два раза: чтобы канал не закрывался таймаутом TCP и быстрее обнаруживал, когда канал закрыт (это исторически слабое TCP). Цель опроса HTTP/AJAX заключается в том, чтобы обойти тот факт, что HTTP не является двунаправленным (т.е. Опросы клиентов, чтобы дать серверу возможность отправить данные обратно). Рамки ping/pong WebSocket обычно имеют длину 2 байта. Для опроса HTTP/AJAX требуются полные заголовки, файлы cookie и т.д., Которые могут легко суммироваться за килобайт для каждого запроса/ответа. Даже если вы отправляете ping/pong 10 раз в секунду поверх WebSockets, вы все равно вряд ли сравните с накладными расходами HTTP/AJAX каждые 2 секунды. Однако обратите внимание, что приложения не имеют возможности отправлять сообщения ping/pong. Это между браузером и сервером.
-
Если вы потеряете подключение к Интернету, вы получите событие onclose. Если ваш браузер не делает для вас сообщения ping/pong, вы не можете получать onclose до тех пор, пока не попытаетесь отправить сообщение после того, как сетевое подключение будет отключено.
-
Я бы не заменил рабочую службу RESTful на WebSockets. Вы будете делать много картографических работ, возможно, очень мало пользы (опять же, WebSockets не предназначен для замены того, что уже хорошо работает). Я могу представить себе ситуации, когда у вас может быть комбинация обоих: REST для передачи состояния, WebSockets для уведомления о событиях. Например. сервер отправляет сообщение WebSocket, указывающее "что-то изменившееся", которое запускает клиент для выполнения запроса REST, чтобы узнать об изменениях.
Обновление
Уточнение: вы можете сделать REST поверх WebSockets, но это не соответствует философии. REST - это архитектурный стиль, который не имеет отношения к базовой транспортной системе. Это ограниченная архитектура: "клиент-сервер", "безгосударственный", "кешируемый", "многоуровневая система", "код по требованию" и "единый интерфейс". WebSockets не ограничено ни одним из них; это общая транспортная система сообщений. Вы можете ограничить использование WebSockets RESTful, но не делайте этого, пока вы не узнаете как REST, так и WebSockets, и не сможете определить, когда это будет правильно.