[Moscow.pm] Protocol::WebSocket::Client close code

Grigory Batalov grisxa на gmail.com
Пт Окт 2 09:56:22 PDT 2015


Спасибо, хорошая идея!

Правда, модуль эти байты портит :-D

У него в недрах при пополнении буфера происходит декодирование UTF-8,
https://metacpan.org/source/VTI/Protocol-WebSocket-0.19/lib/Protocol/WebSocket/Frame.pm#L84

которое реагирует на двухбайтовую последовательность 00000011,11101000,
превращая её в 00000011,11111101.

Таким образом, закрывая на сервере соединение с кодом 1000 OK,
я получаю на клиенте 1021 OK ;-)

$ perl -MEncode -e '$a = pack "n", 1000; $b = Encode::decode("UTF-8",$a); print unpack "n", $b'
1021

Прилагаю скрипт-клиент и скрипт-сервер для наглядности.

В Fri, 2 Oct 2015 15:47:43 +0300
Dmitry Smal <mialinx на gmail.com> пишет:

> Нет.  Close Frame приходит как обычный кусок данных.
> 
> Я использую примерно такой костыль
> > $client->on(read => sub {
> >     my ($client, $buf) = @_;
> >     if ($client->{frame_buffer}->opcode == 8) {
> >         $client->{close_code} = unpack('n', substr($buf, 0, 2));
> > # Вот это не проверял, проверьте!
> >         $client->{close_reason} = substr($buf, 2);
> > # Т.к. использую тектстовый код
> >         return;
> >     }
> 
> 
> On 10/02/2015 01:42 PM, Grigory Batalov wrote:
> > Всем привет!
> >
> > Можно ли в Protocol::WebSocket::Client получить код закрытия сокета,
> > как это делается в Mojo::UserAgent ?
> >
> > $tx->on(
> >      finish => sub {
> >          my ( $tx, $code, $reason ) = @_;
> >          say "WebSocket closed with status ($code) $reason.";
> >      }
> > );
> >
> > Мне это нужно для разделения корректно и некорректно закрытых
> > соединений.
> 

----------- следущая часть -----------
Вложение не в текстовом формате было извлечено…
Имя: test-client.pl
Тип: application/x-perl
Размер: 1087 байтов
Описание: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151002/c20cdd38/attachment.bin>
----------- следущая часть -----------
Вложение не в текстовом формате было извлечено…
Имя: test-serv.pl
Тип: application/x-perl
Размер: 251 байтов
Описание: отсутствует
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20151002/c20cdd38/attachment-0001.bin>


Подробная информация о списке рассылки Moscow-pm