//Get data from database, then sort list by staff name:
List<StaffMember> staffList = staffHandler.GetStaffMembers();
var sortedList = from staffmember in staffList
orderby staffmember.Name ascending
select staffmember;
Websockets и SSE (события, отправленные сервером) способны одновременно передавать данные в браузеры, однако они не являются конкурирующими технологиями.
Соединения веб-соединений могут как отправлять данные в браузер, так и получать данные из браузера. Хорошим примером приложения, которое может использовать websockets, является приложение для чата.
Соединения SSE могут только передавать данные в браузер. Онлайн-котировки акций или твиттеры, обновляющие временную шкалу или фид, являются хорошими примерами приложения, которое может извлечь выгоду из SSE.
На практике, поскольку все, что можно сделать с помощью SSE, также можно выполнять с помощью Websockets, Websockets получает больше внимания и любви, а многие другие браузеры поддерживают веб-узлы, чем SSE.
Однако это может быть излишним для некоторых типов приложений, а бэкэнд может быть проще реализовать с помощью протокола, такого как SSE.
Кроме того, SSE может быть заполнен в старых браузерах, которые не поддерживают его, используя только JavaScript. Некоторые реализации SSF-полиполков можно найти на странице gg-файла Modernizr .
Gotchas:
HTML5Rocks имеет некоторую хорошую информацию об SSE. С этой страницы:
События с сервером и веб-узлами
Почему вы выбрали события, переданные сервером через WebSockets? Хороший вопрос.
Одна из причин, по которой SSE хранились в тени, потому что более поздние API, такие как WebSockets, обеспечивают более богатый протокол для выполнения двунаправленной полнодуплексной связи. Наличие двухканального канала более привлекательно для таких вещей, как игры, приложения для обмена сообщениями и для случаев, когда вам нужны почти обновления в реальном времени в обоих направлениях. Однако в некоторых сценариях данные не нужно отправлять с клиента. Вам просто нужны обновления из какого-либо действия сервера. Несколько примеров - это обновления статуса друзей, биржевые тикеры, новостные ленты или другие автоматизированные механизмы передачи данных (например, обновление клиентской базы данных веб-SQL или хранилища объектов IndexedDB). Если вам нужно отправить данные на сервер, XMLHttpRequest всегда является другом.
SSE отправляются по традиционному HTTP. Это означает, что для работы не требуется специальный протокол или реализация сервера. WebSockets, с другой стороны, требуют полнодуплексных соединений и новых серверов Socket Socket для обработки протокола. Кроме того, Server-Sent Events имеют множество функций, которые не имеют WebSockets, такие как автоматическое повторное подключение, идентификаторы событий и возможность отправлять произвольные события.
blockquote>
Резюме TLDR:
Преимущества SSE над веб-сокетами:
- Транспортировано по простому HTTP вместо пользовательского протокола
- Может быть заполнено с помощью javascript на «backport» SSE для браузеров, которые еще не поддерживают его.
- Встроенная поддержка повторного подключения и идентификатора события
- Упрощенный протокол
Преимущества Веб-разъемы над SSE:
- Реальное время, двухстороннее сообщение.
- Встроенная поддержка в других браузерах
Идеальные варианты использования SSE:
- Поток потокового тикера
- обновление твиттера
- Уведомления в браузере
SSE gotchas:
- Нет двоичной поддержки
- Максимальное ограничение открытых подключений
Согласно caniuse.com:
Вы можете использовать полис заполняемого клиентом для расширения поддержки SSE во многих других браузерах. Это менее вероятно с помощью WebSockets. Некоторые полиномы EventSource:
Если вы необходимо поддерживать все браузеры, подумайте об использовании библиотеки, такой как web-socket-js , SignalR или socket.io , которые поддерживают несколько транспортов, таких как WebSockets, SSE, Forever Frame и длинный опрос AJAX. Они также требуют модификации на стороне сервера.
Подробнее о SSE:
Узнайте больше о WebSockets от:
Другие отличия:
Одно замечание: у меня были проблемы с веб-сайтами и корпоративными брандмауэрами. (Использование HTTPS помогает, но не всегда.)
См. https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94
I предположить, что не так много проблем с Server-Sent Мероприятия. Но я не знаю.
Тем не менее, WebSockets очень забавны. У меня есть небольшая веб-игра, в которой используются websockets (через Socket.IO) ( http://minibman.com )
Веб-сокеты - это протокол, обеспечивающий полнодуплексный канал связи по одному TCP-соединению. Например, двусторонняя связь между сервером и браузером Поскольку протокол более сложный, сервер и браузер должны полагаться на библиотеку websocket, которая является socket.io
Example - Online chat application.
SSE (Server- Sent Event). В случае события, отправленного сервером, связь выполняется с сервера только на браузер и браузер не может отправлять какие-либо данные на сервер. Такое общение в основном используется, когда необходимо показывать только обновленные данные, а затем сервер отправляет сообщение всякий раз, когда данные обновляются. Например, односторонняя связь между сервером и браузером. Этот протокол менее сложный, поэтому нет необходимости полагаться на внешнюю библиотеку. Сам JAVASCRIPT предоставляет интерфейс EventSource
для приема отправленных сервером сообщений.
Example - Online stock quotes or cricket score website.
Здесь говорится о различиях между веб-сокетами и событиями, отправленными сервером. Поскольку Java EE 7 API WebSocket уже входит в спецификацию, и кажется, что отправленные сервером события будут выпущены в следующей версии корпоративного выпуска.
WebSocket и SSE являются альтернативой традиционной веб-архитектуре запроса-ответа, но они не являются точно конкурирующими технологиями. Архитектура WebSocket состоит из сокета, который открывается между клиентом и сервером для полнодуплексной (двунаправленной) связи. Вместо отправки GET-сообщения и ожидания ответа сервера клиент просто слушает сокет, получает обновления сервера и использует данные для инициирования или поддержки различных взаимодействий. Клиент может также использовать сокет для связи с сервером, например, отправив сообщение ACK, когда обновление было успешно получено.
SSE - это более простой стандарт, разработанный как расширение HTML5. Хотя SSE позволяет асинхронным сообщениям от сервера к клиенту, клиент не может отправлять сообщения на сервер. Модель полудуплексной связи SSE лучше всего подходит для приложений, где клиенту просто нужно получать потоковые обновления с сервера. Одним из преимуществ SSE над WebSocket является то, что он работает через HTTP, не требуя дополнительных компонентов.
Для многоцелевого веб-приложения, требующего обширной связи между клиентом и сервером, WebSocket является очевидным выбором. SSE более подходит для приложений, которые хотят передавать асинхронные данные клиенту с сервера, но не требуют ответа.
Максимальное ограничение соединения не является проблемой с http2 + sse.
Это было проблемой на http 1
Opera, Chrome, Safari поддерживает SSE, Chrome, Safari поддерживает SSE внутри SharedWorker Firefox, поддерживает XMLHttpRequest readyState, поэтому мы можем сделать polyfil EventSource для Firefox