170 похожих чатов

Добрый день! помогите пожалуйста, есть таска и имеется такой пункт

- 3. Периодически проверять соединение между клиентом и сервером при помощи запросов, которые ничего не меняют.
Как это реализовать?

Нашла информацию по возможности использовать heartbeat, который как раз должен регулировать интервал проверки соединения, но примеров как это сделать нет.
Я сделала так:
async def wshandler(request: web.Request):
resp = web.WebSocketResponse(heartbeat=1)
...
...
но непонятно как это проверить, где-то должна отображаться в логе эта проверка соединения? В консоли сервера нет, в инструментах разработчика клиента (F12 - сеть) ничего не увидела.
Подскажите куда копать?

97 ответов

30 просмотров

это что за язык вообще?

Максим-Alexandrovna Автор вопроса
Anton Piliugin
это что за язык вообще?

питошка ой, пойду в джанго группу сорри

Так а для чего проверять? Ws и можно применять чтобы иметь "постоянное соединение"

Идель Гатауллин Гатауллин
Так а для чего проверять? Ws и можно применять что...

вообще у нормальных серверов есть таймаут на длительность соединения, чтобы не держать миллион открытых соединений

Идель Гатауллин Гатауллин
А разве нельзя поставить обработчик на отключение?

https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.1 до Pong можешь прочитать и это: https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close https://www.rfc-editor.org/rfc/rfc6455.html#section-1.4

И что ты этим хотел сказать? Я в курсе про close. Если вкладку в браузере закроешь - тебе прилетит отключение, на которое можно поставить обработчик. Так сути вопроса не меняет.

Anton Piliugin
это где ты про вкладку такое нашёл??

Я ставил подключение по сокетам между сайтом и серваком и ловил отключение при закрытии вкладки

Идель Гатауллин Гатауллин
Я ставил подключение по сокетам между сайтом и сер...

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

Anton Piliugin
в firefox вроде работает. но суть не в этом, во-пе...

А разве на сокеты нельзя хедеры ставить для предотвращения не тех подключений?

Anton Piliugin
в firefox вроде работает. но суть не в этом, во-пе...

Я бы не сказал, что это распространенное явление по сокетам

Идель Гатауллин Гатауллин
Так а для чего проверять? Ws и можно применять что...

А что делать в ситуации, когда клиент или сервер отвалился, не закрыв соединение?

Anton Piliugin
в firefox вроде работает. но суть не в этом, во-пе...

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

John Doe
А что делать в ситуации, когда клиент или сервер о...

Ws создаёт подключение на машине, которое попадает под "детект" самого сервера(кода) или я что-то неправильно понимаю?

что значит "не тех", вот IoT, например работать по WS может

John Doe
А что делать в ситуации, когда клиент или сервер о...

сервер хрен с ним, реконнект только запили

Идель Гатауллин Гатауллин
Я конечно не бегу утверждать, что отключение элект...

подключись по WS и выключи свой пк или ноут, что там у тебя.

Anton Piliugin
подключись по WS и выключи свой пк или ноут, что т...

Не, у меня и так ПК настрадался от отключения электричества, что даже ИБП купил. Ради практики ПК гробить не буду

Anton Piliugin
какиех хедеры?

Ладно забей, пруфоф на хедеры я не нашел

Идель Гатауллин Гатауллин
Ладно забей, пруфоф на хедеры я не нашел

я могу ещё раз переспросить: о каких хедерах идёт речь?

Идель Гатауллин Гатауллин
Ws создаёт подключение на машине, которое попадает...

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

Anton Piliugin
а они в WebSocketах есть?

Пруфоф на наличие не нашел, я же сказал. Но некоторые источники утверждают, что браузеры не поддерживают хедеры на сокетах

Идель Гатауллин Гатауллин
О подобных обычным post get запросам

и как они могли бы решить проблему мёртвых соединений?

Anton Piliugin
и как они могли бы решить проблему мёртвых соедине...

Эту - никак. Но ты добавил проблему того, что подключится могут все, и я на это осмелился ответить

Anton Piliugin
а это разве проблема?

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

Идель Гатауллин Гатауллин
Эту - никак. Но ты добавил проблему того, что подк...

Ты че первый день в чате? Тут тех кто осмеливается отвечать не любят)

Идель Гатауллин Гатауллин
.

Он имеет ввиду, что не только браузеры умеют в работать с вебсокетами

http заголовки на стадии хендшейка? Мы же о них?

John Doe
http заголовки на стадии хендшейка? Мы же о них?

А вот тут я не уверен, что это будет довольно быстро, если на стадии рукопожатия

John Doe
Всм не быстро?

Я сказал, что не уверен, это будет быстро, если добавить кастомные хедеры

Идель Гатауллин Гатауллин
Но вообще да, я это имел ввиду

Хендшейк работает через http, значит подчинается всем правилам http протокола

Идель Гатауллин Гатауллин
Тип передаваемых данных будет больше, а это вес

Не, всё быстро будет. Заголовки много места не занимают

John Doe
Не, всё быстро будет. Заголовки много места не зан...

Является ли это решение "Фильтрации" всех пользователей, чтобы отсечь "ненужных"?

Идель Гатауллин Гатауллин
Является ли это решение "Фильтрации" всех пользова...

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

Идель Гатауллин Гатауллин
Ну, значит решение.

Но только это не решает проблему мертвых подключений, которую мы выше обсуждали

John Doe
Но только это не решает проблему мертвых подключен...

А вот на это я не бежал отвечать, так что оставлю это остальным экспертам.)

Идель Гатауллин Гатауллин
А, понял

отключение интернета, вылет браузера, отключение питания - множество сценариев, короче говоря

Anton Piliugin
м?

В плане отключать и делать новые подключения через время, а в это же время на сервере удалять "старые" подключения. Точную реализацию я пока е сформировал, но идея есть

Михаил Золотарёв
Ты че первый день в чате? Тут тех кто осмеливается...

Скорее тут не любят тех, кто отвечает на вопросы не разбираясь в теме

Ну вообще странно, тоесть что б ответить на вопрос нужно именно эту задачу решить. Всегда есть мысли как можно решить, не всегда они верные но может и выйти. Это ж не официальный ответ чата) Есть возможно нескольким людям отписать. Вот если админ будет ерунду писать, тогда да)

Грубовато, но почти да. Как при token и refresh токен. Если сервак упадет-он просто принимать подключения не будет, если поднимается - будет в базу писать. И поставить тайм-аут на проверку из базы сокетов со временем создания и удалять их по истечении.

Так я тебе говорю про решение мертвых

Andrii
screenshot

https://stackoverflow.com/a/23240725

Anton Piliugin
если сервак упадёт, то все соединения сбросятся

А что мешает делать реконнект со стороны клиента? И все равно все подключения можно через try catch удалять, как и из базы

Идель Гатауллин Гатауллин
Грубовато, но почти да. Как при token и refresh то...

А как можно подключение сохранить в бд? Или я что-то не понял

Инфу о нем, как минимум на сервере держать массив о сокетах и id к ним, а в базе инфа об id. И дату тоже.

Идель Гатауллин Гатауллин
Грубовато, но почти да. Как при token и refresh то...

А проверку сокетов по истечению таймаута как будешь делать?

По времени создания в базе. Просто вытаскивать все у кого время создания - и условие.

Идель Гатауллин Гатауллин
По времени создания в базе. Просто вытаскивать все...

Ты просто будешь после таймаута отключать соединение? Или как, я не понял

Делать тайм-аут на каждый сокет ты имеешь ввиду?

John Doe
Ты просто будешь после таймаута отключать соединен...

После таймаута лезть в базу и доставать все "устаревшие" подключения. Хотя идея с таймаутом на сокет - тоже мне нравится

Смотри, ещё раз говорю. Если просто делать тайм-аут на сокеты - то ты просто можешь удалить сессию у юзера в его момент использоватэния - так?

Идель Гатауллин Гатауллин
Смотри, ещё раз говорю. Если просто делать тайм-ау...

Крч, да. Делаем со стороны клиента запрос на Коннект и тайм-аут на перезапрос подключения. В это же время со стороны Бека на каждое новое подключение делаем тайм-аут времени жизни - условно 10 минут. Условно говоря - у клиента подключение должно жить 10 минут, и потому делаем либо через interval или через timeout запрос на переподключение. На беке же как тайм-аут срабатывает - удаляем подключение. Как у клиента - делаем запрос на подключение. Итог - старые удаляются по времени. Новые будут создаваться только если клиент активен

Alexander
Ну вообще странно, тоесть что б ответить на вопрос...

Есть какая-то грань между вариантом решения проблемы и откровенной ерундой. Впрочем, я про свои собственные ощущения: кого я не люблю

Идель Гатауллин Гатауллин
Фидбек?

давай по-порядку: 1. Подключаемся и сохраняем таймаут, после которого можно переподключаться в случае разрыва соединения?

Идель Гатауллин Гатауллин
Я уже от ДБ отказался

а что с таймаутом откуда он берётся и куда девается, разбираюсь в первом предложении

Anton Piliugin
давай по-порядку: 1. Подключаемся и сохраняем тайм...

Подключаемся и через таймут со стороны Бека разрываем соединение. А со стороны клиента во время подключения делаем тайм-аут на переподключение

Идель Гатауллин Гатауллин
Ещё лучше

то есть вернулись туда откуда начали?

Anton Piliugin
вообще у нормальных серверов есть таймаут на длите...

Я из сообщения не понял, что идёт проверка на"живость" соединения

Идель Гатауллин Гатауллин
Я из сообщения не понял, что идёт проверка на"живо...

я не писал про проверку, в этом сообщении, потом писал.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта