go-ethereum/p2p/protocols/README.md
zelig 7a6ff56333 p2p: network testing framework and protocol abstraction
subpackages:

* adapters:
  * msgpipes for simulated test connections
  * rlpx the RLPx adapter for normal non-test use
  * inproc simulated in-process network adapter
  * docker placeholder for docker cluster remote adapter
* protocols: easy-to-setup modular protocols
* simulations:
  * generic network model
  * journal, events, snapshots
  * cytoscape visualisation plugin
  * resourceful controller suite + REST API server
  * example: connectivity UX backend
* testing: test resource drivers
  * exchange: trigger/expect style driver for single node and its peers
  * sessions:   for unit testing protocols and protocol modules
  * (network: for network testing, benchmarking, stats, correctness, fault tolerance)
  * test peerpool

see more in the README-s in each subpackage

* p2p/server : conn/disconn hooks
* reporter remote client skeleton
2017-05-06 14:23:38 +01:00

1.4 KiB

p2p/protocols: devp2p subprotocol abstraction

The protocols subpackage is an extension to p2p. It offers a simple and user friendly simple way to define devp2p subprotocols by abstracting away code that implementations would typically share.

The package provides a protocol peer object of type protocols.Peer initialised from

  • a p2p.Peer, a p2p.MsgReadWriter (the arguments passed to p2p.Protocol#Run),
  • a protocols.CodeMap, this encodes the msg code and msg type associations
  • messenger interface (with methods SendMsg and ReadMsg) that abstracts out sending and receiving a msg
  • disconnect function

Allowing the p2p.Protocol#Run function to construct this peer allows passing it to arbitrary service instances sitting on peer connections. These service instances can encapsulate vertical slices of business logic without duplicating code related to protocol communication.

Features

  • registering multiple handler callbacks for incoming messages
  • automate RLP decoding/encoding based on reflection
  • provide the forever loop to read incoming messages
  • standardise error handling related to communication
  • with disconnection and messaging abstracted out allows protocols to be used in network simulations with or without serialisation, transport and p2p server
  • TODO: automatic generation of wire protocol specification for peers

see the possibly obsolete #2254 for the peer management/connectivity related aspect)