++ed by:

2 PAUSE users
1 non-PAUSE user.

Author image Felipe Gasper
and 1 contributors




    #Never instantiate Net::WebSocket::Frame directly;
    #always call new() on a subclass:
    my $frame = Net::WebSocket::Frame::text->new(
        fin => 0,                   #to start a fragmented message
        rsv => 0b11,                #RSV2 and RSV3 are on
        mask => "\x01\x02\x03\x04   #clients MUST include; servers MUST NOT
        payload => \'Woot!',



    $frame->to_bytes();     #for sending over the wire


This is the base class for all frame objects. The interface as described above should be fairly straightforward.


You can have custom frame classes, e.g., to support WebSocket extensions that use custom frame opcodes. RFC 6455 allocates opcodes 3-7 for data frames and 11-15 (0xb - 0xf) for control frames.

The best way to do this is to subclass either Net::WebSocket::Base::DataFrame or Net::WebSocket::Base::ControlFrame, depending on what kind of frame you’re dealing with.

An example of such a class is below:

    package My::Custom::Frame::booya;

    use strict;
    use warnings;

    use parent qw( Net::WebSocket::Base::DataFrame );

    use constant get_opcode => 3;

    use constant get_type => 'booya';

Note that Net::WebSocket::Parser still won’t know how to handle such a custom frame, so if you intend to receive custom frames as part of messages, you’ll also need to create a custom base class of this class, then also subclass Net::WebSocket::Parser. You may additionally want to subclass Net::WebSocket::Streamer::Server (or -::Client) if you do streaming.

NOTE: THIS IS LARGELY UNTESTED. I’m not familiar with any application that actually requires this feature. The permessage-deflate extension seems to be the only one that has much widespread web browser support.