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
>

Reply via email to