From my previous postings you may know, that I played pretty much with an external library named ZeroMQ . The main goal was to move the work of the plain interprocess away from the Smalltalk engine to external threads. My hope is, that because of this I can get more multithreading power from my hardware.
In the current project I needed to implement a service discovery or service offering in a local network to support zero configuration support.
The first choice was to use 0MQ and their epgm network support. Actually it worked pretty stable – but only under Windows 7. Under Windows XP all system had problems over 24 hours of running. The behaviour was pretty the same: suddenly a thread was running at 100%. And this only happened under XP.
In the last time of this project I removed the epgm-based approach and used the high level c wrapper around 0MQ around 0MQ, which offers a UDP based service discovery system.
At first the system crashed, but with the help of the developer list of 0MQ a solution could be found within 24 hours. Amazing – consider the support of commercial companies and how long it takes to get good support from them.
Therefore I wrapped czmq and the system is working now pretty well, using only UDP (and therefore using less network resources than epgm) – both under XP and Windows 7.
The library itself is also a good candidate for UDP programming, though they limited the support of max. 255 bytes per udp message, but that is a constant within the source code.