Net::WebSocket::Frame
#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_sr => \'Woot!', ); $frame->get_fin(); $frame->get_mask_bytes(); $frame->get_payload(); $frame->set_rsv(); $frame->get_rsv(); $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.
::Client
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.
permessage-deflate
To install Net::WebSocket, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Net::WebSocket
CPAN shell
perl -MCPAN -e shell install Net::WebSocket
For more information on module installation, please visit the detailed CPAN module installation guide.