For this i ended up using for the communication model WCF with NetTcpBinding,
- session-full (based on the TCP's session, if the session drops then subscription is aborted, no need to retain a virtual session though pooling),
- multi threaded (no build in synchronization so that the server response would have light speed),
- not Order (problematic for distributed environments),
- not Secured (didn't need that)
Starting this project i had many qualms regarding the use of Wcf NetTcpBinding over Internet as from what microsoft says:
"In Windows only intranet environment and when all the service clients are WCF clients, the service can be deployed with the NetTCPBinding and Transport level security for achieving maximum performance. NetTCPBinding by default uses transport level security over a TCP channel along with binary message encoding. In a Windows only intranet environment, ClientCredentialType can be set to Windows to enable Windows authentication."
"For a WCF service that has to be exposed over internet or deployed in a heterogeneous environment and needs to potentially interact with the clients on non-windows platforms, BasicHttpBinding or WSHttpBinding can be used depending upon the level of conformance required with the commonly used security standards."
WSHttpBinding couldn't satisfy my needs for performance and NetTcpBinding couldn't satisfy my needs for stability.
Other thoughts i had was:
- To use Xmpp (jabber) protocol with the build in support for publish/subscribe functionality (XEP-0060), the very good wrapper from agsXMPP SDK and the best Xmpp Server from ignite realtime openfire.
- To use Fix 4.2 protocol with the add on of FAST which advances performance and the engine of Onix Solutions
- To develop a proprietary protocol based on plain TCP/IP and many cups of frape!
Fix protocol would be a good solution too but extensibility was one concern of mine as also the "Hybrid" needs i mentioned before.
Proprietary protocols are very good as long as you have a good stomach and mine couldn't stand overnight drinking coffee and smoking.
Finally i gave a chance to NetTcpBinding with my fingers crossed.
After some moths of the system being released i have to admit that NetTcpBinding is working just fine with no drops and very good transfer rates (real time updates).
Currently my only problem is Janus GridEx performance as for real time updates their Grid is using the most of the processor time and there is no way you can avoid that, except if timing the updates.