ServiceStack: выбор отправляемых сервером событий через WebSockets
Просматривал последние заметки о выпуске, в которых упоминается новая функция SSE. Эта функция, безусловно, полезна и, похоже, использует длинные опросы в обратном направлении к браузеру.
Я новичок во всем этом, но WebSockets кажется оптимальным способом, поскольку он двунаправлен, когда SSE только односторонний доступ к браузеру. Плюс IE не поддерживает SSE, но поддерживает WebSockets для последних двух или трех версий.
Мне просто интересно, почему выбор SSE вместо WebSockets.
1 ответ
Причины поддержки отправленных событий сервера описаны в демонстрационном проекте чата:
Server Sent Events (SSE) - это элегантная веб-технология для эффективного получения push-уведомлений с любого HTTP-сервера. Он может рассматриваться как сочетание длинных опросов и односторонних WebSockets и имеет много преимуществ перед каждым:
- Простой - отправленные сервером события - это всего лишь один долгоживущий HTTP-запрос, который может поддерживать любой HTTP-сервер
- Эффективно - каждый клиент использует одно TCP-соединение, и каждое сообщение позволяет избежать накладных расходов на HTTP-соединения и заголовки, которые часто бывают быстрее, чем веб-сокеты.
- Resilient - браузеры автоматически обнаруживают разрыв соединения и автоматически переподключаются
- Функциональная совместимость - поскольку это просто старый HTTP, он интроспективен с вашими любимыми инструментами HTTP и даже работает через HTTP прокси (с отключенной буферизацией и проверенным кодированием).
- Хорошо поддерживается - как веб-стандарт поддерживается во всех основных браузерах, кроме IE, который можно включить с помощью полифилов.
т. е. это красивый простой и элегантный веб-стандарт с лучшей верностью HTTP, чем у WebSockets, который идеально подходит для коммуникаций Server Push, которые работают как в ASP.NET, так и в SelfHosts ServiceStack, не требуя каких-либо дополнительных зависимостей.NET или требуя, чтобы хост Windows Server имел WebSockets поддержка включена для использования. Поддержка IE может быть включена с помощью polyfills.
WebSockets может быть поддержан позднее, но для этого, вероятно, потребуются дополнительные внешние зависимости и требования для Windows Server, который поддерживает WebSockets.