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
, andsessionToken
inlocalStorage
to 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
.