[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