I hoped I wouldn't have to deal with that, but it seems like you can't avoid the inevitable.
I have in my server a pile of messages (received from the low-tier clients, and the upper-tier server), and are supposed to be broadcast eventually to all the clients, and to the server (simple tree hierarchy).
I'm not really familiar with the performance capabilities of C# sockets, or of my system in general.
I really have no idea how would my design deal under real-time conditions (I'm not talking about a supercomputer, just an ordinary server, sometimes even an ordinary computer...).
Anyway, I don't know if the distribution time would be sufficient to deal with all the incoming messages, treat them, and then distribute them to the others.
I started to think about scheduling strategies, all must deal with several stuff:
A. If there was a disconnection from a client, when he reconnects, he needs to be updated about the relevant changes.
B. There are messages that are more important (they are prioritized), but then if I let only them pass (first), they could very easily starve the lower priorities.
Maybe simple round-robin scheduling would do, or distribute by message to all the clients that didn't get it yet.
What do you guys think?