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, andsessionToken
<!-- 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, andsessionTokeninlocalStorageto resume sessions across page reloads.
| 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. |
+---------+----------------+-----------+
| 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.