Plastic network protocol.
This release includes official support for the new 'Plastic network protocol' (a.k.a. 'plasticproto').
The protocol is not yet enabled by default, and to take advantage of it, a file named plasticpipeprotocol.conf must be created (details below).
The main features of plasticproto are:
* Improved API compatibility. Our intention from now on is to keep all clients and servers compatible (from this release onwards). It means we get rid of breaking compatibility on major releases as we did in the past. All of this will greatly simplify deployment, especially on big teams. Users will be able to upgrade to a newer major release even if not the team members upgrade at the same time. Compatibility checks now happen on a per method basis. Methods can be versioned independently, which helps us evolving the API faster while not forcing all users to upgrade.
* Reduced call overhead: the protocol is much more compact than before, because it is lower level and designed ad-hoc for Plastic. As an example: a simple "cm lrep" request (just the request, not including the answer) was about 400 bytes before. Now it is about 50 bytes when a new socket connection is opened, and only 2 bytes if a connection is reused.
* Increased portability. The new plasticproto makes it simpler to port to new frameworks like .NET Core and implement native clients on mobile devices. This is because it doesn’t rely on complex RPC like before, but just on plain sockets.
* Better performance: the lighter API helps during both performance and scalability tests. While the initial version is not dramatically faster than the older on LAN, the plan is to use it to greatly improve data transfer.
A little bit of history:
* For years, communications between Plastic client and servers (including communications between servers) happened through .NET/Mono Remoting.
* In fact, it was a heavily customized remoting layer, improved for scalability, performance, memory reduction and faster serialization, among others.
* It allowed us to run circles around other version controls (more here: https://www.plasticscm.com/version-control-for-games.html#performance-results) but it had issues regarding major version compatibility.
* We had to freeze the API to keep it compatible, and per-method versioning was not easily doable.
How to enable plasticproto:
* The 5.4 client and server will still default to "remoting" protocol except if file named plasticpipeprotocol.conf is created in the client binaries folder (and another one in the same place as the server binaries to enable plasticproto to be used during replicas among plastic servers).
* The format of the file is as follows:
plasticprotocol myserver:8080 superserver:8085 ssl://myserver:8084 remotingprotocol otherserver:4040 defaultprotocol remotingprotocol // it can also be ‘plasticprotocol’
* You can specify how to connect to each server.
* If you install this new version on client and server and you want to give plasticproto a try, the following plasticpipeprotocol.conf file will do:
(This file is meant to be temporary and as soon as we enable protocol autodetection, it will no longer be used).