This is my first time working with peer to peer connections, Im using WebRTC. If possible I'd like to design my multi-peer connection (session) so that there's no limit to the number of peers who could potentially connect to this session.
The session handles the following data transfer:
- video data from one of the peers
- message data from all of the peers
- audio data from all of the peers
I don't know how this is normally done, but I considered a few options that seem to differ fundamentally:
[Equal Load] Each peer connects to each other peer. So if there are 10 peers, each peer makes 10 peer to peer connections. All of the above data is sent from each peer to each of their connections.
[Host Burden] Each peer connects to only one peer, the host, who connects to all of the peers. The data is sent to the host peer, who reflects it back to each other peer as necessary.
[Static Reflection] Each peer is connected to exactly one other peer. The data is reflected from each peer until it has been shared with them all.
[Dynamic Reflection] Each peer is tested for a rough estimate of its bandwidth capabilities, and connected to a dynamic number of peers based on an algorithm to determine the number of peers it can transfer the session's data to without going beyond its bandwidth capacity. The data is reflected from each peer until it has been shared with them all.
Which of these connection structures is the most efficient solution for my multi-peer connection (session)? If there is no clear winner, or none of them are the correct structure, please explain the pros/cons or the explanation of a better structure.