0.2.0 • Published 3 years ago

@raycaster/realtime v0.2.0

Weekly downloads
3
License
MIT
Repository
-
Last release
3 years ago

realtime

🚧 Documentation & stable implementation in progress 🚧

A signaling server & web client for WebRTC.

The goal of this library is to absorb some of the complexity of WebRTC, and handle negotiating the connection between two peers, allowing the direct transfer of any arbitrary data between the two peers. This may be well-suited for video chat, game data updates, or other applications that require real-time performance.

It handles this through some of the following:

API

SignalingEvents

Signaling events are the set of events that realtime uses internally for connecting two peers via WebRTC.

The static types for the event types / event payloads are shared across the client and server.

enum SignalingEvents {
  Initialize = "Initialize",
  UserConnected = "UserConnected",
  UserDisconnected = "UserDisconnected",
  SendOffer = "SendOffer",
  ReceiveOffer = "ReceiveOffer",
  SendAnswer = "SendAnswer",
  ReceiveAnswer = "ReceiveAnswer",
  SendCandidate = "SendCandidate",
  ReceiveCandidate = "ReceiveCandidate",
}

SignalingServer

The signaling server is responsible for negotiating a RTCPeerConnection between 2 clients. Once the peer connection is established, all data is sent between the two clients without the need of the intermediate server.

Example

import { SignalingServer } from "@raycaster/realtime";
import { createServer } from "http";

// attach the signaling server to the top-level http server
const httpServer = createServer();
const signalingServer = new SignalingServer({ server: httpServer });

httpServer.listen(3000);

RTCClient

The RTC client is meant to be used in the browser, and initiates a connection request through the included signaling server to another peer. Once the connection is established, the two peers are able to send data directly to each other.

Example

import { RTCClient } from "@raycaster/realtime";

const client = new RTCClient({ url: 'ws://localhost:3000' });