Changes since V1.0
- Unit test coverage raised from 25% to 71.5%
- Add support for V11 which sends messages via protobuf
- Housekeeping issues to improve consistency of naming and other conventions. Config variables should be more self-explanatory now
- Drop CRC32 from V10 (discussion)
- Improve channel usage to prevent cooperative hogging
- Improved Endpoint check to add support for hostnames
- Improved Prometheus instrumentation
- Ability to Stop the network and tear down all active connections
The biggest functional change in this update is the addition of Protocol V11. This necessitated changing the handshake process to be asymetrical so that the connecting node can send a special signal to indicate it wants to elevate the connection to a new format. For a detailed description, see the README. While V11/protobuf doesn't offer a substantial improvement over V10 in terms of efficiency/bandwidth, it does open up the possibility of allowing non-golang based clients from connecting to a node.
Comparison of Protocols:
Test Data Used:
Messages: 423188 (approximately 5 hours worth of data)
Raw Byte Size: 97.2155 MiB
Benchmarks:
V9 Encoded Size: 125.7525 MiB (29.35% overhead) (559.1675ms spent encoding)
V10 Encoded Size: 101.4952 MiB ( 4.40% overhead) (179.0086ms spent encoding)
V11 Encoded Size: 100.8350 MiB ( 3.72% overhead) ( 44.0295ms spent encoding)