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 -~----------~----~----~----~------~----~------~--~---