mirror of
https://github.com/socketio/socket.io.git
synced 2026-04-30 03:00:39 -04:00
3fff7cafa98f1ba5840475b6917c651fe841a943
When a packet contains binary elements, the built-in parser does not modify them and simply sends them in their own WebSocket frame.
Example: `socket.emit("some event", Buffer.of(1,2,3))`
is encoded and transferred as:
- 1st frame: 51-["some event",{"_placeholder":true,"num":0}]
- 2nd frame: <buffer 01 02 03>
where:
- `5` is the type of the packet (binary message)
- `1` is the number of binary attachments
- `-` is the separator
- `["some event",{"_placeholder":true,"num":0}]` is the payload (including the placeholder)
On the receiving end, the parser reads the number of attachments and buffers them until they are all received.
Before this change, the built-in parser accepted any number of binary attachments, which could be exploited to make the server run out of memory.
The number of attachments is now limited to 10, which should be sufficient for most use cases.
The limit can be increased with a custom `parser`:
```js
import { Encoder, Decoder } from "socket.io-parser";
const io = new Server({
parser: {
Encoder,
Decoder: class extends Decoder {
constructor() {
super({
maxAttachments: 20
});
}
}
}
});
```
socket.io
Getting Started
Please check our documentation here.
Questions
Our issues list is exclusively reserved for bug reports and feature requests. For usage questions, please use the following resources:
- read our documentation
- check our troubleshooting guide
- look for/ask questions on Stack Overflow
- create a new discussion
Security
If you think that you have found a security vulnerability in our project, please do not create an issue in this GitHub repository, but rather refer to our Security Policy.
Issues and contribution
Please make sure to read our Contributing Guide before creating an issue or making a pull request.
Thanks to everyone who has already contributed to Socket.IO!
License
Languages
TypeScript
63.8%
JavaScript
36%