Serialisation
In ecflow 4. series, we used boost Serialisation for the client/server communication.
If we used the same boost version it meant that different version of 4.X.X client/server could be used interchangeably.
However this caused problems when we wanted upgrade to a newer boost version, since it broke the client/server api.
This has been addressed in ecflow 5, we now use JSON for the client/server communication.
Hence future release of ecflow 5 series can be done with different boost releases
Stats Command
For the stats command in 4 series version , the sever returns a struct for the statistics, the client then formats this.
However this meant we would break client/server api, if the struct was changed between releases. If we added new statistics.
In ecflow 5.0.0 we return a string, the server itself will format the string, adding/removing new fields without effecting client/server compatibility.
We still retain the ability to return the struct for test purposes.
Checkpoint and caching
Whenever the server checkpoints(i.e saves the definition state) , the full defs is written to disk.
The checkpoint uses ecFlow definition format, where writing to disk and reading it back into memory, can done faster the boost or even Json serialisation.
In series 5 the server takes advantage of this by caching this as a string before writing it out as the checkpoint file.
This effectively caches the de-serialisation cost .
If any user requests the full defs we can return cache string.
Auto Sync
In the 4 series, whenever the GUI makes a change, it involves two calls to the server.
- Invoke the command
- call the sync command, This then syncs the changes from the server, into the client
In 5 series version we support auto sync, which effectively combines the two separate commands into one.
This reduces the latency for GUI and python clients.