---
name: "Mojo::WebSocket"
section: "3pm"
platform: "linux"
package: "libmojolicious-perl"
version: "9.39+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Mojo::WebSocket"
---

# Mojo::WebSocket(3pm)

The WebSocket protocol

## NAME

Mojo::WebSocket - The WebSocket protocol

## SYNOPSIS

```
  use Mojo::WebSocket qw(WS_TEXT build_frame parse_frame);
  my $bytes = build_frame 0, 1, 0, 0, 0, WS_TEXT, 'Hello World!';
  my $frame = parse_frame \$bytes, 262144;
```

## DESCRIPTION

Mojo::WebSocket implements the WebSocket protocol as described in RFC 6455 \<https://tools.ietf.org/html/rfc6455\>. Note that 64-bit frames require a Perl with support for quads or they are limited to 32-bit.

## FUNCTIONS

Mojo::WebSocket implements the following functions, which can be imported individually.

### build\_frame

```
  my $bytes = build_frame $masked, $fin, $rsv1, $rsv2, $rsv3, $op, $payload;
```

Build WebSocket frame.

```
  # Masked binary frame with FIN bit and payload
  say build_frame 1, 1, 0, 0, 0, WS_BINARY, 'Hello World!';
  # Text frame with payload but without FIN bit
  say build_frame 0, 0, 0, 0, 0, WS_TEXT, 'Hello ';
  # Continuation frame with FIN bit and payload
  say build_frame 0, 1, 0, 0, 0, WS_CONTINUATION, 'World!';
  # Close frame with FIN bit and without payload
  say build_frame 0, 1, 0, 0, 0, WS_CLOSE, '';
  # Ping frame with FIN bit and payload
  say build_frame 0, 1, 0, 0, 0, WS_PING, 'Test 123';
  # Pong frame with FIN bit and payload
  say build_frame 0, 1, 0, 0, 0, WS_PONG, 'Test 123';
```

### challenge

```
  my $bool = challenge Mojo::Transaction::WebSocket->new;
```

Check WebSocket handshake challenge.

### client\_handshake

```
  my $tx = client_handshake Mojo::Transaction::HTTP->new;
```

Perform WebSocket handshake client-side.

### parse\_frame

```
  my $frame = parse_frame \$bytes, $limit;
```

Parse WebSocket frame.

```
  # Parse single frame and remove it from buffer
  my $frame = parse_frame \$buffer, 262144;
  say "FIN: $frame->[0]";
  say "RSV1: $frame->[1]";
  say "RSV2: $frame->[2]";
  say "RSV3: $frame->[3]";
  say "Opcode: $frame->[4]";
  say "Payload: $frame->[5]";
```

### server\_handshake

```
  my $tx = server_handshake Mojo::Transaction::HTTP->new;
```

Perform WebSocket handshake server-side.

## CONSTANTS

Mojo::WebSocket implements the following constants, which can be imported individually.

### WS\_BINARY

Opcode for `"Binary"` frames.

### WS\_CLOSE

Opcode for `"Close"` frames.

### WS\_CONTINUATION

Opcode for `"Continuation"` frames.

### WS\_PING

Opcode for `"Ping"` frames.

### WS\_PONG

Opcode for `"Pong"` frames.

### WS\_TEXT

Opcode for `"Text"` frames.

## DEBUGGING

You can set the `"MOJO_WEBSOCKET_DEBUG"` environment variable to get some advanced diagnostics information printed to `"STDERR"`.

```
  MOJO_WEBSOCKET_DEBUG=1
```

## SEE ALSO

Mojolicious, Mojolicious::Guides, \<https://mojolicious.org\>.
