As both the amount of data exchanged between applications and the number of applications grow, classic one-on-one unicast connections via TCP/IP no longer scale. Hence multicast protocols such as UDP are getting more and more into the mainstream, for instance as the basis of Eurex New Trading Architecture.
Unfortunately, multicasts are inherently unreliable (as opposed to TCP), so I became interested in reliable multicast as a means to get the best of both worlds. Here are a couple of (hopefully useful) links about reliable multicast in general and Pragmatic General Multicast (PGM) in particular.
- Excellent paper from Microsoft Research explaining PGM’s basic concepts: http://research.microsoft.com/apps/pubs/default.aspx?id=68888
- Specification of PGM: http://tools.ietf.org/rfcmarkup?doc=3208
- General Question on PGM viability: http://programmers.stackexchange.com/questions/207392/is-pgm-pragmatic-general-multicast-viable-to-achieve-reliable-message-delivery
- Microsoft’s implementation of PGM in Winsock: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740125%28v=vs.85%29.aspx
- Cisco has special support for PGM in some of their routers: http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipmulti/command/imc-cr-book/imc_i3.html#wp4476852680
- PGM and WCF (Windows Communication Foundation): http://www.codeproject.com/Articles/62277/Reliable-Multicast-with-PGM-and-WCF
- A Java implementation of PGM: https://github.com/steve-o/javapgm
- OpenPGM (previously on Google Code): https://github.com/steve-o/openpgm
- Based on OpenPGM, ZeroMQ supports PGM as a transport layer: http://zeromq.org/