One other thing that I forgot to mention is that I would be in favor
of adding a new message type for asynchronous calls, even though
it would changing the wire format and could be kind of a pain to roll out.

I figured the wire format would not be a problem if the version number is increased, because older servers could simply respond with an error message. Unfortunately this will not work because the client does not expect anything to be returned when sending a message type indicating a one-way request. Also, new message types expecting a response that does not have the older format cannot be properly responded to by older servers.

I guess it is only possible to maintain backward compatibility. Forward compatibility would put too much constraints on the possibilities of new protocols. The only option for older servers receiving unknown, new message types is to close the connection. This would give the client no clue as to why the connection is closed, but there is no way for a server to communicate the information that works in all situations.

A workaround might be a service/message type that returns the version of the protocol implemented by the server. This could be part of the protocols, or be implemented as an application service. A client connecting to a server can check the version and report immediatly if the server supports the minimum version needed.

--
Kind regards,

Johan Stuyts

Reply via email to