Re[11]: Почему не отменяется задача?
От: Passerby  
Дата: 16.03.21 16:58
Оценка:
Здравствуйте, Serginio1, Вы писали:
S>https://stackoverflow.com/questions/49786269/signalr-core-check-connection-state-from-webapi
Это не решает проблему кратковременного нарушения связи. Но ссылка полезная, спасибо.
Re[12]: Почему не отменяется задача?
От: varenikAA  
Дата: 17.03.21 02:08
Оценка:
Здравствуйте, Passerby, Вы писали:

AA>> var timeOut = new CancellationTokenSource(5_000).Token;

P>Зачем?
WebSocket.ReceiveAsync
отменится автоматически если неполучит ответа через 5 секунд. цикл не нужен.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[13]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 02:28
Оценка:
Здравствуйте, varenikAA, Вы писали:
AA>WebSocket.ReceiveAsync
Это не то. Речь идет про ситуацию, когда подписались, к примеру, день назад и день данные приходили, а потом перестали. А не про возвращение ответа на команду в течение какого-то времени.
Re[14]: Почему не отменяется задача?
От: varenikAA  
Дата: 17.03.21 03:29
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Это не то. Речь идет про ситуацию, когда подписались, к примеру, день назад и день данные приходили, а потом перестали. А не про возвращение ответа на команду в течение какого-то времени.

Понятно, а соединение с сервером живое, т.е. статус сокета Open? Данные могут перестать приходить только если соединение разорвано в случае вебсокета.
тут нужно не на время ориентироваться как мне кажется а на статус соединения.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[12]: Почему не отменяется задача?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.03.21 07:50
Оценка: 1 (1)
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, Serginio1, Вы писали:

S>>https://stackoverflow.com/questions/49786269/signalr-core-check-connection-state-from-webapi
P>Это не решает проблему кратковременного нарушения связи. Но ссылка полезная, спасибо.
Еще ссылочка
https://docs.microsoft.com/ru-ru/aspnet/core/signalr/javascript-client?view=aspnetcore-5.0#reconnect-clients
https://docs.microsoft.com/ru-ru/dotnet/api/microsoft.aspnetcore.signalr.client.hubconnectionbuilderextensions.withautomaticreconnect?view=aspnetcore-5.0
и солнце б утром не вставало, когда бы не было меня
Отредактировано 17.03.2021 9:12 Serginio1 . Предыдущая версия .
Re[15]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 07:58
Оценка:
Здравствуйте, varenikAA, Вы писали:
AA>тут нужно не на время ориентироваться как мне кажется а на статус соединения.
Соединение может быть не закрыто, а данные не будут присылаться.
Есть хороший сайт http://websocket.org/echo.html Там можешь сделать коннект, а потом выдернуть кабель связи из ПК и нажать на дисконнект. Можешь потренироваться с работающими серверами, к примеру,
поле Location: wss://api.hitbtc.com/api/2/ws
поле Message: {"method": "subscribeTicker","params": {"symbol": "ETHBTC"},"id": 123}
И разорви связь во время приема пакетов.
Поэтому иногда серверы посылают строго периодические сигналы по одному из подписанных каналов. Которые тоже надо отслеживать, т.е. тот же цикл с задержкой времени, зависящей от периодичности сигналов.
Re[16]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 17.03.21 08:24
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Есть хороший сайт http://websocket.org/echo.html Там можешь сделать коннект, а потом выдернуть кабель связи из ПК и нажать на дисконнект.

Тут-то и нажимать ничего не должно быть надо, он сам должен убежать в дисконнект. Но такой способ не очень показательный, т.к. разрыв связи определяется однозначно.
Re[17]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 08:58
Оценка: 6 (1)
Здравствуйте, Mystic Artifact, Вы писали:
MA> Но такой способ не очень показательный, т.к. разрыв связи определяется однозначно.
Как он определяется? Выдергиваешь Lan, вставляешь и ничего не происходит, а пакеты перестают поступать. Т.е. если кратковременный разрыв связи, об этом не узнаешь, если не будешь отслеживать поступление пакетов. Могу скинуть ссылку на работающий шаблон с работающим сервером. Там и отслеживание состояние сокета есть. Только при разрыве связи ничего не происходит. Согласен, что дисконнект в таком случае нажимать излишне.
Отредактировано 17.03.2021 9:01 Passerby . Предыдущая версия .
Re[18]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 17.03.21 09:11
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Как он определяется? Выдергиваешь Lan, вставляешь и ничего не происходит, а пакеты перестают поступать. Т.е. если кратковременный разрыв связи, об этом не узнаешь, если не будешь отслеживать поступление пакетов. Могу скинуть ссылку на работающий шаблон с работающим сервером. Там и отслеживание состояние сокета есть. Только при разрыве связи ничего не происходит. Согласен, что дисконнект в таком случае нажимать излишне.

И правда... я ж говорил, я с ними не дружу.
Ну, тут и помог бы пинг/понг — выдергиваешь Lan — нажимаешь Send — и через несколько секунд он сам станет disconnected.
Конечно, если ты знаешь, что у тебя события и так прилетают регулярно — то и пинг не нужен, или число их можно скоратить.
Re[19]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 09:43
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:
MA> Ну, тут и помог бы пинг/понг
Не помог бы. Сервер может пинговаться, но перед этим произошел разрыв связи. Поэтому только отслеживание пакетов. Да и для того чтобы делать периодически пинг, тоже нужен тот же цикл. Ничего не упрощается, только меньше информации.
MA> И правда... я ж говорил, я с ними не дружу.
Дело в том, что серверы по HttpClient дают устаревшие данные. Они не посылают актуальные данные, т.к. запросов огромное количество, то собирать данные для каждого было бы утомительно. Потому данные собираются с каким-то периодом, а посылаются кэшированные. К тому же задержка времени связанная с запросом. К тому же ограничение количества запросов в секунду. Но если задержка порядка секунды или несколько секунд роли не играет и запросов мало, то HttpClient.
Но заметил, что и по WebSocket есть сервера, которые делают задержку, если подписан на много каналов.
Отредактировано 17.03.2021 9:56 Passerby . Предыдущая версия . Еще …
Отредактировано 17.03.2021 9:50 Passerby . Предыдущая версия .
Re[20]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 17.03.21 09:49
Оценка:
Здравствуйте, Passerby, Вы писали:

MA>> Ну, тут и помог бы пинг/понг

P>Не помог бы. Сервер может пинговаться, но перед этим произошел разрыв связи. Поэтому только отслеживание пакетов. Да и для того чтобы делать периодически пинг, тоже нужен тот же цикл. Ничего не упрощается, только меньше информации.
Пинг/понг в смысле — посылка запроса/сообщения через веб-сокет. Тут смысл только в том, что бы дать ему возможность отвалиться естественным образом. Твой пример с выдернутым Lan и кнопочкой Send как раз это демонстрирует.
Про остальное, ты все и так написал, и похоже на план.
Re[21]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 10:14
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:
MA> Пинг/понг в смысле — посылка запроса/сообщения через веб-сокет. Тут смысл только в том, что бы дать ему возможность отвалиться естественным образом.
Он и так отваливается мгновенно, если на секунду выдернуть лан.
Я уже вчера все написал без прерываний. Если во время цикла приходят данные, все ОК.
Re[22]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 17.03.21 10:30
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Он и так отваливается мгновенно, если на секунду выдернуть лан.

Ты же написал выше, — обратное, что не прерывается. Я даже попробовал — выдергиваем кабель — ничего не прырвается, при чём довольно долго. Если потушить интерфейс программно — тогда да, прерывается, мгновенно.
Re[23]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 10:42
Оценка: :)
Здравствуйте, Mystic Artifact, Вы писали:
MA> Ты же написал выше, — обратное, что не прерывается. Я даже попробовал — выдергиваем кабель — ничего не прырвается, при чём довольно долго.
Я писал, что если выдернуть lan, то ничего не происходит в смысле нет после восстановления связи сигнала дисконнект. Но пакеты перестают поступать. Сейчас проверил и на сервере, с которого поступает информация и на ранее опубликованной ссылке: на пару секунд выдергиваешь лан, вставляешь... и как в Гамлете — дальше тишина. У нас разная карма, наверное. Ты профи, поэтому тебе пакеты продолжают поступать.
Отредактировано 17.03.2021 10:44 Passerby . Предыдущая версия .
Re[24]: Почему не отменяется задача?
От: Mystic Artifact  
Дата: 17.03.21 10:45
Оценка:
Здравствуйте, Passerby, Вы писали:

P> Гамлете — дальше тишина. У нас разная карма, наверное. Ты профи, поэтому пакеты продолжают поступать.


Карма та же, думаю просто вышел глухонемной разговор. Ладно, главное, что ты разобрался и мне напомнил как приятно иметь дело с сетью. Спасибо.
Re[25]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 10:47
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:
MA> Спасибо.
Тебе спасибо.
Re[16]: Почему не отменяется задача?
От: varenikAA  
Дата: 17.03.21 10:58
Оценка: 2 (1)
Здравствуйте, Passerby, Вы писали:

P>Здравствуйте, varenikAA, Вы писали:

AA>>тут нужно не на время ориентироваться как мне кажется а на статус соединения.
P>Соединение может быть не закрыто, а данные не будут присылаться.
P>Есть хороший сайт http://websocket.org/echo.html Там можешь сделать коннект, а потом выдернуть кабель связи из ПК и нажать на дисконнект. Можешь потренироваться с работающими серверами, к примеру,

Тут что-то другое. соединился, опустил сеть. через ~20 сек ошибка соединения. если восстановить соединение чуть раньше эхо отрабатывает нормально.
сокет предусматривает таймаут разъединения как раз на случай длительных задержек, сетевых потерь.
Вероятно это что-то в приложении сервера не так.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[17]: Почему не отменяется задача?
От: Passerby  
Дата: 17.03.21 11:56
Оценка: 15 (1)
Здравствуйте, varenikAA, Вы писали:
AA>Тут что-то другое. соединился, опустил сеть. через ~20 сек ошибка соединения. если восстановить соединение чуть раньше эхо отрабатывает нормально.
Да, сейчас проверил, действительно, если меньше секунд 20, то восстанавливается. И дисконнект приходит. Раньше спешил, не дожидался этого. Сейчас посмотрел программу, я ее наращивал из шаблона. Так оказывается там нет подписи на закрытие соединения. Есть только проверка соединения после создания коннекта. Буду исправлять. Спасибо.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.