Skip to content

efecan0/binaryrpc-client-js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

BinaryRPC Client

A minimalist BinaryRPC library for browsers.

  • Single dependency – MessagePack for compact payloads
  • Fire‑and‑forget call() API (no promises to manage)
  • QoS 0/1/2 frame flow with ACK/COMMIT support
  • URL‑level session resumption via clientId, deviceId, and sessionToken

Browser Quick‑Start

<!-- 1) Load MessagePack (ESM) → exposes window.MessagePack -->
<script type="module">
  import { encode, decode } from 'https://cdn.jsdelivr.net/npm/@msgpack/[email protected]/+esm';
  window.MessagePack = { encode, decode };
</script>

<!-- 2) Load the BinaryRPC client script -->
<script src="binaryrpc.js"></script>

<script>
  const rpc = new BinaryRPC('wss://example.com/ws');

  rpc.registerHandler('message', data =>
    console.log(`${data.username}: ${data.text}`));

  rpc.connect('client‑123', 'device‑web');
  rpc.call('join', { username: 'alice', roomname: 'lobby' });
</script>

Tip: Persist clientId, deviceId, and sessionToken in localStorage to resume sessions across page reloads.


API

Method Description
new BinaryRPC(url, options?) Create client. options = { reconnectInterval, maxReconnectAttempts, onConnect, onError }
connect(clientId, deviceId, sessionToken?) Opens WebSocket with those IDs as query parameters.
registerHandler(method, fn) Add callback for a server‑initiated RPC (or response).
call(method, payload = {}) Send a DATA frame (fire‑and‑forget).
disconnect() Close the WebSocket immediately.

Frame Layout

+---------+----------------+-----------+
| 1 byte  | 8 bytes BE     | n bytes   |
| type    | frame ID       | payload   |
+---------+----------------+-----------+

type values: 0x00 DATA, 0x01 ACK, 0x02 PREPARE, 0x03 PREPARE_ACK, 0x04 COMMIT, 0x05 COMPLETE.


About

A minimalist **BinaryRPC** library for browsers.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published