---
name: "Protocol::WebSocket"
section: "3pm"
platform: "linux"
package: "libprotocol-websocket-perl"
version: "0.26-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Protocol::WebSocket"
---

# Protocol::WebSocket(3pm)

WebSocket protocol

## NAME

Protocol::WebSocket - WebSocket protocol

## SYNOPSIS

```
    # Server side
    my $hs = Protocol::WebSocket::Handshake::Server->new;
    $hs->parse('some data from the client');
    $hs->is_done; # tells us when handshake is done
    my $frame = $hs->build_frame;
    $frame->append('some data from the client');
    while (defined(my $message = $frame->next)) {
        if ($frame->is_close) {
            # Send close frame back
            send(
                $hs->build_frame(
                    type    => 'close',
                    version => $version
                )->to_bytes
            );
            return;
        }
        # We got a message!
    }
```

## DESCRIPTION

Client/server WebSocket message and frame parser/constructor. This module does not provide a WebSocket server or client, but is made for using in http servers or clients to provide WebSocket support.

Protocol::WebSocket supports the following WebSocket protocol versions:

```
    draft-ietf-hybi-17 (latest)
    draft-ietf-hybi-10
    draft-ietf-hybi-00 (with HAProxy support)
    draft-hixie-75
```

By default the latest version is used. The WebSocket version is detected automatically on the server side. On the client side you have set a `"version"` attribute to an appropriate value.

Protocol::WebSocket itself does not contain any code and cannot be used directly. Instead the following modules should be used:

### High-level modules

*Protocol::WebSocket::Server*

Server helper class.

*Protocol::WebSocket::Client*

Client helper class.

### Low-level modules

*Protocol::WebSocket::Handshake::Server*

Server handshake parser and constructor.

*Protocol::WebSocket::Handshake::Client*

Client handshake parser and constructor.

*Protocol::WebSocket::Frame*

WebSocket frame parser and constructor.

*Protocol::WebSocket::Request*

Low level WebSocket request parser and constructor.

*Protocol::WebSocket::Response*

Low level WebSocket response parser and constructor.

*Protocol::WebSocket::URL*

Low level WebSocket url parser and constructor.

## EXAMPLES

For examples on how to use Protocol::WebSocket with various event loops see `"examples/"` directory in the distribution.

## CREDITS

In order of appearance:

Paul "LeoNerd" Evans

Jon Gentle

Lee Aylward

Chia-liang Kao

Atomer Ju

Chuck Bredestege

Matthew Lien (BlueT)

Joao Orui

Toshio Ito (debug-ito)

Neil Bowers

Michal XpaXek

Graham Ollis

Anton Petrusevich

Eric Wastl

## AUTHOR

Viacheslav Tykhanovskyi, `"vti@cpan.org"`.

## COPYRIGHT

Copyright (C) 2010-2018, Viacheslav Tykhanovskyi.

This program is free software, you can redistribute it and/or modify it under the same terms as Perl 5.10.
