The gossipsub spec does not specify stream mechanics, whether it's:
one ephemeral stream per message, – or –
we keep long-lived streams.
The answer is (2): each gossipsub peer opens a stream to its counter, resulting in a pair of streams, each of which is owned by either peer.
Rationale vs. stream mechanics of the DHT (ephemeral streams): DHTs are speculative and RPC-oriented, while pubsub mechanisms form an overlay for continuous message flow.
The gossipsub spec does not specify stream mechanics, whether it's:
The answer is (2): each gossipsub peer opens a stream to its counter, resulting in a pair of streams, each of which is owned by either peer.
Rationale vs. stream mechanics of the DHT (ephemeral streams): DHTs are speculative and RPC-oriented, while pubsub mechanisms form an overlay for continuous message flow.
This has already led to an incompatibility bug between the Go and Rust implementations: https://github.com/libp2p/rust-libp2p/pull/898/commits/9c56b84dbe6657fa7300b6c97595d9acc8c7a504