Сервер отправил событие против веб-сокетов?

Я работаю над веб-приложением, доступным для пользователей через несколько платформ от смартфонов до настольных компьютеров, которые иногда должны делать связь между двумя клиентами, например, если я хочу, чтобы мой друг присоединился к моей сети, я пришлю ему но я хочу, чтобы этот запрос был замечен моим другом без необходимости обновлять страницу.

В этом сценарии, который будет лучшим выбором? А также, поскольку я хочу, чтобы это работало на как можно большем числе платформ и браузеров, у которых больше поддержки браузеров? Есть ли лучший вариант?

Ответ 1

Некоторые вещи, которые следует учитывать при выборе этого варианта.

  • Попытка получить контент через соединение WebSocket - это плохой дизайнерское решение, потому что WebSockets - это другой протокол, вложенный внутри HTTP-соединения и не может использовать кеширование (ни браузеров и CDN).
  • Некоторые старшие прокси не передают соединение с Websocket, если оно не скрыто в защищенном соединении, пока сервер Отправленные события остаются HTTP-соединением и не будут это.
  • В среде Android не поддерживаются ни WebSockets, ни SSE браузера до 4.4 (когда они переключились на использование Chrome) - таким образом, если вы рассматриваете гибридное мобильное приложение, вам понадобится резерв как SocketIO, поскольку на момент написания этой статьи 4.4 составляет всего 20% рынка и гибридные приложения используют собственный браузер Android.
  • WebSockets - это самый эффективный протокол для мобильных устройств, поскольку все остальные параметры требуют много HTTP-соединений, и это повторяющиеся ведение переговоров с заголовками, которые будут обременять процессор и аккумулятор.

Другим вариантом могут быть уведомления. Все мобильные устройства теперь поддерживают уведомления, которые могут быть нацелены на приложение, а также на несколько браузеров. Во всех случаях соединение уже существует от клиента к центру обмена сообщениями (Apple, Google, Microsoft и т.д.), И все уведомления отправляются по этому каналу.

Вот хороший обзор WebSockets против SSE: http://www.html5rocks.com/en/tutorials/eventsource/basics/

Ответ 2

  • События, отправленные сервером: постоянный сервер соединения-2-клиент только для отправки текстовых сообщений и реализуется во всех основных браузерах, но Internet Explorer. Он может снова подключиться, если связь потеряна. http://caniuse.com/eventsource

  • WebSokets: полнодуплексное постоянное соединение, способное передавать текст и двоичные данные UTF8. http://caniuse.com/websockets

WebSocket лучше, и будущее.

Ответ 3

Из того, что я понимаю, SSE проще и проще реализовать, тогда как WebSockets предлагают двунаправленную передачу данных, но являются их собственным протоколом /API, которые вам нужно понять, чтобы воспользоваться преимуществами. Честно говоря, я никогда не беспокоился об SSE, Socket.IO делает все, что мне нужно, насколько общение в режиме реального времени в Интернете довольно легко и построенный для кросс-браузера.

Если вы просто хотите, чтобы он мог видеть уведомление, SSE должны быть в порядке. Если вы хотите, чтобы он мог ответить на ваш запрос друга с той же страницы, тогда сервер отправит вам уведомление, которое он принял, вы, вероятно, захотите использовать реализацию WebSockets.