I am working on a system by which to send references to message
objects over the wire and was wondering if anyone has done this
before.  I have a few ideas about how to do things but I wanted to get
some input from others before I re-invent the wheel.

The general idea would be that a server may tell the client about Foo,
a message that references messages Baz and Foz.  However, Bar (another
message) also references Baz and Foz.  In order to avoid sending the
same Baz and Foz instance multiple times Foo and Bar just contain a
reference to Baz and Foz.  The client can then ask the server for Baz
or Foz if it doesn't already have them when it receives a Foo or Bar
message.

Example flow:
 * Server sends Foo to client that references Baz instance #243 and
Foz instance #62.
 * Client receives the message and notices that it doesn't know about
Baz #243 or Foz #62.
 * Client sends a request to the server asking for Baz #243 and Foz
#62.
 * Server receives the request and sends Baz #243 and Foz #62 to the
client.
 * Client receives Baz #243 and Foz #62 and caches them and then goes
about processing the Foo message it received earlier (it now has the
full data structure available).

 * Server sends Bar to client that references Baz #645 and Foz #62.
 * Client receives the message and finds Foz #62 but not Baz #645 in
it's local cache.
 * Client sends a request to the server asking for Baz #645.
 * Server receives the request and sends Baz #645 to the client.
 * Client receives Baz #645 and caches it and then goes about
processing the Bar message it received earlier.

 * Client sends Foo message to the server that references Baz #645 and
Foz #62.
 * Server receives the message and since it already knows about Baz
#645 and Foz #62 it doesn't need to ask the client about them.

As you can see, the server only had to send one copy of Foz #62 even
though it was referenced in three messages (Foo twice and Bar once).
Ideally this would all be abstracted away from the view of the
application programmer and they would only have to deal with building
messages that contain references and the underlying messaging system
would deal with requesting missing pieces and caching them.

My initial thought was to just have some int32 UID field on every Baz
and Foz object and then Foo and Bar would contain a similar int32
field where they wanted to reference the Baz / Foz.  However, this
seems like it leaves a lot that can't be abstracted out so the
application programmer has to understand that those int32 fields in
Foo and Bar are references to other objects and they would have to
look them up in the cache every time.  This method also makes it
difficult for the messaging system to know it needs to request a
remote reference without fully processing the incoming message.

I have some other thoughts on how to handle the problem but I haven't
really fleshed them out much yet so input is welcome.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to