We have a chat-based .NET desktop server application which is working well. Currently there is one server on the local (wireless) network and multiple .NET CF clients connect to it and exchange data (‘chat messages’) with each other.
We now want to allow more than one instance of our server to be running on the same subnet, each with its own set of connected clients, and to enable all the servers to communicate with each other. The aim is to enable the use case where a client sends a message to one server (which will already echo the message to all of its connected clients), but we now want that server to automatically detect all other server instances and send the message on to them. They will then forward the message to all of their connected clients.
In other words, we want to add some peer-to-peer behaviour to our server, along with service discovery. The server instances will be running on occasionally-connected mobile PCs which may come and go from the wireless network.
I have not used ROZeroConf before but from what I have read it seems it will meet our needs. I would prefer to make our server app as self-contained as possible without requiring much customization of the mobile platforms, hence I am interested in using ROZeroConfHub rather than requiring Bonjour to be installed on each platform. But the documentation about ROZCHub is rather sparse. Indeed, the wiki page for ZC doesn’t even mention it - this page gives you the impression that Bonjour is the only option. It is mentioned in passing here but that’s all.
So my questions are
- Is there any documentation or tutorial that covers ROZCHub?
- Am I correct in thinking that the ROZCHub exe needs to be bundled with every instance of our server?
- Is this done simply by adding it to the VS solution as a content item and deploying it to the same folder as our server, or is there more to it than that?
- Our server code is actually compiled as a class library, rather than an exe. Any issues about using ROZCHub in this case?
- Which UDP ports does ROZCHub use? We may need to ensure that these ports are not blocked on our mobile platforms.
- Are there any special considerations when using RO in a p2p scenario, instead of the usual client/server design?