multistream-select icon indicating copy to clipboard operation
multistream-select copied to clipboard

ls protocol format is unfriendly

Open whyrusleeping opened this issue 8 years ago • 4 comments

I'm still not on board with the protocol here. It feels broken.

Multistream select's primary operation is reading a length prefixed newline delimited string. Lets call this operation readLpNd().

Interacting with multistream normally just requires calling readLpNd twice, and passing the stream on to someone else. When reading an ls, i'd expect something similar, for example:

numProtos := readLpNd()
for i := 0; i < numProtos; i++ {
    proto := readLpNd()
    fmt.Println("ls response: ", proto)
}

Where the first read reads in a number encoded in either hex or base10 ascii (since the point is somewhat to have human readability).

Instead, I have to do some weird nonsense to read the ls response:

firstline := readLpNd()
lengthOfWholeMessage := readUvarint(firstline) // this value is effectively useless
numberOfProtocols := readUvarint(firstline)
for i := 0; i < numberOfProtocols; i++ {
    // same as above
}

This just feels rather off, and isnt very user friendly (especially users who might try to manually interact with the protocol)

whyrusleeping avatar Jan 01 '17 19:01 whyrusleeping

Its also really inconvenient to create these messages.

whyrusleeping avatar Jan 01 '17 19:01 whyrusleeping

Although ease of implementation is super valuable, is it worth to create a breaking change in the spec now?

daviddias avatar Jan 02 '17 17:01 daviddias

Yeah, as far as i can tell nobody uses multistream ls. the only tool (mss-nc) that can easily ls things doesnt follow the spec anyways

whyrusleeping avatar Jan 06 '17 09:01 whyrusleeping

If all messages are text based, I think newline delimited is much better for implementations and for testing with tools like nc.

creationix avatar Mar 08 '19 16:03 creationix