github.com/pion/webrtc/v3@v3.2.24/examples/data-channels-flow-control/README.md (about) 1 # data-channels-flow-control 2 This example demonstrates how to use the following property / methods. 3 4 * func (d *DataChannel) BufferedAmount() uint64 5 * func (d *DataChannel) SetBufferedAmountLowThreshold(th uint64) 6 * func (d *DataChannel) BufferedAmountLowThreshold() uint64 7 * func (d *DataChannel) OnBufferedAmountLow(f func()) 8 9 These methods are equivalent to that of JavaScript WebRTC API. 10 See https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel for more details. 11 12 ## When do we need it? 13 Send or SendText methods are called on DataChannel to send data to the connected peer. 14 The methods return immediately, but it does not mean the data was actually sent onto 15 the wire. Instead, it is queued in a buffer until it actually gets sent out to the wire. 16 17 When you have a large amount of data to send, it is an application's responsibility to 18 control the buffered amount in order not to indefinitely grow the buffer size to eventually 19 exhaust the memory. 20 21 The rate you wish to send data might be much higher than the rate the data channel can 22 actually send to the peer over the Internet. The above properties/methods help your 23 application to pace the amount of data to be pushed into the data channel. 24 25 26 ## How to run the example code 27 28 The demo code (main.go) implements two endpoints (offerPC and answerPC) in it. 29 30 ``` 31 signaling messages 32 +----------------------------------------+ 33 | | 34 v v 35 +---------------+ +---------------+ 36 | | data | | 37 | offerPC |----------------------->| answerPC | 38 |:PeerConnection| |:PeerConnection| 39 +---------------+ +---------------+ 40 ``` 41 42 First offerPC and answerPC will exchange signaling message to establish a peer-to-peer 43 connection, and data channel (label: "data"). 44 45 Once the data channel is successfully opened, offerPC will start sending a series of 46 1024-byte packets to answerPC as fast as it can, until you kill the process by Ctrl-c. 47 48 49 Here's how to run the code. 50 51 At the root of the example, `pion/webrtc/examples/data-channels-flow-control/`: 52 ``` 53 $ go run main.go 54 2019/08/31 14:56:41 OnOpen: data-824635025728. Start sending a series of 1024-byte packets as fast as it can 55 2019/08/31 14:56:41 OnOpen: data-824637171120. Start receiving data 56 2019/08/31 14:56:42 Throughput: 179.118 Mbps 57 2019/08/31 14:56:43 Throughput: 203.545 Mbps 58 2019/08/31 14:56:44 Throughput: 211.516 Mbps 59 2019/08/31 14:56:45 Throughput: 216.292 Mbps 60 2019/08/31 14:56:46 Throughput: 217.961 Mbps 61 2019/08/31 14:56:47 Throughput: 218.342 Mbps 62 : 63 ```