WebSockets

Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

WebSockets

Post by Palych »

А что народ думает про паутинные розетки?
Есть ли опыт их осмысленного использования?
Наблюдались ли какие-то неожиданные проблемы или наоборот недостатки?
Я правильно понимаю что если соединение теряется по техническим причинам, то браузер его восстанавливает автоматически?
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: WebSockets

Post by Medium-rare »

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

Это ведь просто международный стандарт, возможна имплементация в разных средах. Скорее всего, браузер хэндлит всякие рутинные детали сам.

Использую, но не в браузере, а в десктопном приложении. QWebSocket.

Для восстановления соединения написан код руками, таки. Ибо не браузер. Более того, для поддержки соединения раз в 50 секунд пинается сервер, ping, от него прилетает pong. Как мне объяснили бакэндщики-жабисты, там какой-то хардвер порвёт соединение иначе.
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: WebSockets

Post by Palych »

То есть - в стандарте не прописана необходимость автоматического восстановления соединения со стороны клиентаб и/или реально этого никто не делает на системном уровне?
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: WebSockets

Post by Medium-rare »

Стандарт надо почитать. Но ни разу не слышал от веб-фронтэндщиков, о восстановлении. В толстых клиентах явно поддерживают и восстанваливают. В одном, мне известном, вот этими ручками деланым.

Одна вполне работающая Qt имплементация таки нуждается в небольшом коде для поддержки соединения, как объясняют бэкэндщики из-за их хардвера, тупо закрывающего сокет по таймауту.
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: WebSockets

Post by Palych »

Medium-rare wrote:Одна вполне работающая Qt имплементация таки нуждается в небольшом коде для поддержки соединения, как объясняют бэкэндщики из-за их хардвера, тупо закрывающего сокет по таймауту.
А разве на клиенте не срабатывает onClose() когда сервер закрывает соединение?
Или это без ведома сервера делается?
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: WebSockets

Post by Medium-rare »

Palych wrote: А разве на клиенте не срабатывает onClose() когда сервер закрывает соединение?
Или это без ведома сервера делается?
Срабатывает какой-то хэндлер, да. У меня QWebSocket::disconnected. Но зачем попадать в это состояние с регулярностью в одну минуту, как в нашей ситуации. Для того пинг-понг устраивают. А disconnected уже для менее ожидаемого, и мы получаем какое-то время offline через disconnected.
... and even then it's rare that you'll be going there...
Palych
Уже с Приветом
Posts: 13684
Joined: 16 Jan 2001 10:01

Re: WebSockets

Post by Palych »

А почему не обычный TCP сокет?
Как я понимаю - протокол придётся с нуля писать...
Чтобы через прокси работало?

Кстати, а как оно выглядит с другой стороны: на сервере?
Особенно в кластере, да чтобы без session sharing, чтобы сервера между собой не общались, или общались, но по-минимуму.
Мне видится у каждого соединения свой уникальный ID, который сохраняется даже если соединение восстанавливается после случайного обрыва. Регистрировать эти соединения в каком-то общем хранилище, и если сервер не может переслать что-то клиенту по причине обрыва соединения - он передаёт сообщение тому серверу, который зарегистрирован для этой коннекции, а тот уже - клиенту...
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

Re: WebSockets

Post by Medium-rare »

Мне объясняли, что обычные сокеты в OS ни за что без трафика так долго держать соединение не будут. Там очень большое количество причин, по которым два сокета будут рассоединены, от хардвера, всех свитчей, нетворк адаптеров, через ядро OS до прикладного уровня. Именно передача пакетов есть поддерживающая нормальный сокет открытым сила. А в Вебе в контексте клиента и вовсе нет постоянного соединения для передачи пакетов, сокеты только успевают переоткрываются, можно с WiFi переключиться на Ethernet и назад, щёлкая по ссылочкам. Даже заранее не известно, как там balance loader перешлёт запрос до какого бокса чтобы запрос выполнился. Именно противоположного добиваются с WebSocket, постоянного соединения, чтобы можно было послать сигнал на определённый клиент.

На сервере у нас... точно какая-то гибридно програмно-хардверная штука для обслуживания webscokets есть. Не помню, какая. Что-то на тему: http://kaazing.com/products/kaazing-websocket-gateway/
... and even then it's rare that you'll be going there...
Сабина
Уже с Приветом
Posts: 19041
Joined: 11 Jan 2012 09:25
Location: CA

Re: WebSockets

Post by Сабина »

Мы используем сокеты для закачки файлов. Из подводных камней - browser specific. Хром например взял и поменял в новой версии способ работы с вебсокетами. Деталей не помню но помню что попадало после browser update ;). Могу вспомнить что имено если принципиально. Народ часто не понимает как их эффективно использовать. Примерно как с тредами. Делали file upload рефакторинг и такое там нашли. Файл на чанки делят, а вебсокет конекшен one at the time и те чанки по сути грузятся последовательно. Более того если свалилось в процессе, все начинается с самого начала, хотя вемь смысл чанков чтобы делать retry для свалившихся. Короче резюме - штука хорошая, но пользоваться надо с умом
https://www.youtube.com/watch?v=wOwblaKmyVw

Return to “Вопросы и новости IT”