Skip to content
This repository has been archived by the owner on Jul 16, 2023. It is now read-only.

Nuclei.Communication: Version the communication protocol #3

Closed
pvandervelde opened this issue Dec 3, 2013 · 2 comments
Closed

Nuclei.Communication: Version the communication protocol #3

pvandervelde opened this issue Dec 3, 2013 · 2 comments
Assignees
Milestone

Comments

@pvandervelde
Copy link
Member

It looks like there are (at least) two levels of versioning that are needed:

  • Protocol level
  • API level

The protocol level defines:

  • The way data is translated on the wire. Currently we're using the .NET binary formatter which ties the two sides to the same version (signed version) of the Nuclei.Communication assembly. When versioning is put in place this needs to be changed (e.g. protocol buffers).
  • The available types of messages.
  • The available message processors and the way the message processing is done.
  • The handshake method. Part of the handshake method is the CommunicationSubject, however this doesn't provide enough information by itself to determine the protocol version (or to limit it, e.g. the handshake message is part of the protocol version and may change).
  • The discovery method.

The version for the the protocol level needs to be provided in the discovery so that both sides can indicate if they are capable of handling the given protocol version.

The API level defines:

  • Which command sets and notification sets exist AND what the version of those sets is (i.e. the exact type). The version of the API should be negotiable, i.e. both sides should be able to provide a list of known API versions they can use to communicate and then be able to negotiate the most suitable version to use. Note that this has implications for the user!
    • In case the application needs to support different versions of a command / notification set there will need to be a way to load the types for all versions. Depending on the implementation there may be .NET limitations.
    • Note that if the binary formatter isn't used for the bits => objects translation then the assembly version may not be all that important anymore for the API version.
@pvandervelde
Copy link
Member Author

The discovery needs to:

  • Be versioned separately so that it is independent from the protocol level
  • Provide all the available protocol versions that can be used to connect.

@ghost ghost assigned pvandervelde Jan 7, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
…ds and notifications) namespaces. Not completely done changing the actual namespaces yet.

references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
…ve a single channel (net.tcp://<MACHINE_NAME>:<PORT>/discovery) which will provide discovery capabilities.

references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
- A bootstrap channel which can be queried for the URI's of the different versioned discovery channels.
- One or more versioned discovery channels which provide version specific information about the available protocols.

references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
…e ProtocolLayer and the ProtocolChannel respectively.

references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
… handle types that aren't declared in advance.

references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
pvandervelde added a commit that referenced this issue Mar 24, 2014
references #3
pvandervelde added a commit that referenced this issue Mar 24, 2014
@pvandervelde
Copy link
Member Author

Fixed as of 0.7.2.0

pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
… can be data contracts if they so chose.

references #3
pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
pvandervelde added a commit that referenced this issue Jun 9, 2016
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant