For supporting different cases, might be useful to add to handshake message one byte for different flags. compression is a good example. Also it can be some specific logic for different clients (C++, JS, Python), crypting and etc.
On Tue, Aug 1, 2017 at 7:27 PM, Alexey Kuznetsov <akuznet...@apache.org> wrote: > Pavel, > > How about data compression? > May be it make sense to add a byte with compression algorithm? > 0 - none > 1 - ZIP > 2 - .... > .... > > On Tue, Aug 1, 2017 at 11:10 PM, Pavel Tupitsyn <ptupit...@apache.org> > wrote: > > > Igniters, > > > > Below is a proposed design for thin client protocol [1] [2] socket data > > exchange format. > > > > * Values are little-endian > > * Every request and response message starts with 4-byte length (including > > handshake) > > * Ignite binary format is used for value serialization (via > > GridBinaryMarshaller/BinaryWriter/BinaryReader). Ignite binary protocol > > has > > to be implemented by clients anyway to work with cache values, so it > makes > > sense to use for all data exchange. > > > > > > 1) Socket connection is established on a port according > > to ConnectorConfiguration.port > > > > 2) Handshake is performed. > > Request: > > int32 length = 8 // message length > > byte opCode = 1 // handshake command > > int16 verMajor > > int16 verMinor > > int16 verMaintenance > > byte clientCode = 2 // client type code (odbc, jdbc, platform) > > > > Response: > > uint32 length = 1 > > byte success > > > > 3) Execute command. Request starts with a command code, then goes > > command-specific data. > > For example, IgniteCache<Integer, String>.put(1, "foo") will look like > > this: > > Request: > > int16 opCode // OP_CACHE_GET > > int32 cacheId // GridCacheUtils.cacheId > > byte flags // skipStore, noRetry, etc > > binobject key > > > > Response: > > byte success > > binobject value > > > > Where binobject corresponds to Ignite BinaryMarshaller format, which is > > produced by BinaryWriter.writeObject method. Integer will be represented > as > > byte typeCode = 3 // GridBinaryMarshaller.INT > > int32 value = 1 > > > > 4) Goto (3) > > > > > > Comments are welcome. > > > > Pavel > > > > [1] > > http://apache-ignite-developers.2346864.n4.nabble. > com/Support-for-Ignite- > > clients-in-any-language-thin-client-protocol-td20297.html > > [2] https://issues.apache.org/jira/browse/IGNITE-5896 > > > > > > -- > Alexey Kuznetsov >