Size: a a a

2020 July 02

AP

Anton Petrusevich in Modern::Perl
Protocol::WebSocket создаёт фреймы согласно переданным в конструкторе параметрам.
источник

AP

Anton Petrusevich in Modern::Perl
возможностью дописать в буфер я не пользовался ни разу
источник

AP

Anton Petrusevich in Modern::Perl
при заталкивании фрейма в стрим — он сериализуется целиком
источник

AP

Anton Petrusevich in Modern::Perl
так что я не совсем понимаю о чём вы... ну да ладно
источник

b

basiliscos in Modern::Perl
я уже не помню деталей но например так: фрейм билдится, но это НЕ значит, что фрейм отправится, и и вообще что фрейм на момент билда (!) может быть представлено байтами. Например, при компрессии (а она per-message-deflate), выхлопа от zlib'ам может не быть.
источник

AP

Anton Petrusevich in Modern::Perl
$deflate->deflate(\$message, my $out);
$deflate->flush($out, Z_SYNC_FLUSH);
источник

AP

Anton Petrusevich in Modern::Perl
делаешь флаш — будет выхлоп. фрейм должен отправляться
источник

AP

Anton Petrusevich in Modern::Perl
у меня предусмотрено сжатие на вебсокетах то. работает.
источник

AP

Anton Petrusevich in Modern::Perl
источник

b

basiliscos in Modern::Perl
Э-э-э. Так у так оно, вроде, работает когда 1 мессадж  = 1 фрейм. А если несколько фреймов с одним пейэлоадом, но 1 мессадж? Там тоже можно выкрутиться flush'ем (другим), но это ухудшает качество компрессии.
источник

VG

Vadim Goncharov in Modern::Perl
Venom1 2
а можете подсказать почему так: создаю тсп сокет в локалке, сокет подсоединился данных ходят, все хорошо. отключаю wi-fi на ноуте по сути сети больше нет, но сокет чувствует себя хорошо. из сокета читаю readline(), в сокет пишу $socket->send(). подскажите как ловить такое?
всё правильно, а вдруг сеть сейчас вернется? и полетим дальше
источник

V2

Venom1 2 in Modern::Perl
Все ок спасибо
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
Э-э-э. Так у так оно, вроде, работает когда 1 мессадж  = 1 фрейм. А если несколько фреймов с одним пейэлоадом, но 1 мессадж? Там тоже можно выкрутиться flush'ем (другим), но это ухудшает качество компрессии.
ты теоретизируешь или у вас правда сообщение может не отправиться по команде "послать фрейм"?
источник

b

basiliscos in Modern::Perl
это рфц. Мессадж может состоять из нескольких фреймов.
источник

VG

Vadim Goncharov in Modern::Perl
basiliscos
это другая проблема. Т.е. если удалённый конец просто "выдернули из сети", то да, он как /dev/null ведёт себя и надо решать описанным тобой способом. А вот локальное отключение интерфейса, афаик, к ошибкам должно приводить (как при чтении), и если я прав, локально с таймауты не особо нужны для этого случая.
не должно, и в винде меня это всегда бесило, даже в реестре отрубал всегда раньше - вдруг у меня роутер достаточно быстро ребутается и интерфейс щас вернется, какое ей дело блэт
источник

AP

Anton Petrusevich in Modern::Perl
basiliscos
это рфц. Мессадж может состоять из нескольких фреймов.
я повторю вопрос: ты теоретизируешь? фреймы могут разбивать сообщение, да. это низкий уровень. то есть, ты говоришь "послать сообщение", а оно "подожди, ещё буфер не накопился для передачи"?
источник

b

basiliscos in Modern::Perl
Anton Petrusevich
ты теоретизируешь или у вас правда сообщение может не отправиться по команде "послать фрейм"?
Если интересно, то есть неплохой проект по тестированию на совместимость

https://github.com/crossbario/autobahn-testsuite
источник

VG

Vadim Goncharov in Modern::Perl
Anton Petrusevich
а в чём разница? он же вырубает вайфай физически, как я понял, рутер просто продолжает ждать, что он появится, тцп не в курсе пропажи, просто тупо копит таймауты, которые там ахренеть какие
ну вообще не "ахренеть" какие, если только ты не с Луной контачишь, он замеряет RTT же
источник

VG

Vadim Goncharov in Modern::Perl
basiliscos
да, авто-ответ понгом должен, а вот пинги - не должен (на усмотрение). АФАИК проще сделать - нету данных по tcp столько-то времени - закрываем. Кроме того обычно клиент "более заинтересован" в поддержании коннекшена, поэтому он и пингует. Хотя если вывернутая наизнанку схема, т.е. клиент "подписывается" на события от сервера и просто их получает, то и в таком случае клиент(!) должен пинговать сервер о том что он живой, а не сервер.

Как пример я делал как-то для камеры по GigE протоколу, и там фреймы по UDP от камеры приходили. И там да, клиент должен камеру пинговать. По смыслу такой подход и логично для сервера : чем ставить ещё N таймеров на N клиентов дешевле, обычно, каждому клиенту поставить у себя таймер.

Так что с цитатой с SO не согласен.
ты только что описал распространенную ошибку в проектировании сетевых протоколов, её даже в телеге повторили
источник

AP

Anton Petrusevich in Modern::Perl
Vadim Goncharov
ну вообще не "ахренеть" какие, если только ты не с Луной контачишь, он замеряет RTT же
ну, возможно, что мои воспоминания о сетевых алгоритмах лет на 15 устарели, да...
источник