An alternative to the default socket.io-parser, encoding and decoding packets with msgpack official latest javascript version msgpack-javascript
Please note that you MUST use the parser on both sides (server & client).
Compatibility table:
| Parser version | Socket.IO server version |
|---|---|
| 1.x.x | 3.x.x / 4.x.x |
npm i -S skgdev/socket.io-msgpack-javascript This package doesn't has separate typing to be install, usage is the same regardless of TypeScript or normal JavaScript
| Name | Type | Default |
|---|---|---|
| maxDepth | number | 100 |
| initialBufferSize | number | 2048 |
| sortKeys | boolean | false |
| forceFloat32 | boolean | false |
| forceIntegerToFloat | boolean | false |
| ignoreUndefined | boolean | false |
See:
| Name | Type | Default |
|---|---|---|
| maxStrLength | number | 4_294_967_295 (UINT32_MAX) |
| maxBinLength | number | 4_294_967_295 (UINT32_MAX) |
| maxArrayLength | number | 4_294_967_295 (UINT32_MAX) |
| maxMapLength | number | 4_294_967_295 (UINT32_MAX) |
| maxExtLength | number | 4_294_967_295 (UINT32_MAX) |
You can use max${Type}Length to limit the length of each type decoded.
See:
importcustomParserfrom'@skgdev/socket.io-msgpack-javascript';constcustomParser=require('@skgdev/socket.io-msgpack-javascript');import{Server}from'socket.io';import{io}from"socket.io-client";importcustomParserfrom'@skgdev/socket.io-msgpack-javascript';// Serverconstserver=newServer(PORT,{parser: customParser.build({encoder: ?EncodeOptions,decoder: ?DecodeOptions})});// Clientconstsocket=io('https://server-domain.com',{parser: customParser.build({encoder: ?EncodeOptions,decoder: ?DecodeOptions})});socket.emit('hello', 'you') will create the following packet:
{"type": 2, "nsp": "/", "data": ["hello", "you"] }which will be encoded by the parser as:
<Buffer 83 a4 74 79 70 65 02 a3 6e 73 70 a1 2f a4 64 61 74 61 92 a5 68 65 6c 6c 6f a3 79 6f 75>