I am helping a friend with his rewrite of his .NET application, currently using WinForms + sockets, which is a client/server program that currently has on average ~120 concurrent users (sending messages, using the chat). The client will grow and eventually must be able to handle a several thousand concurrent users.
A thread is created per user but this is not scalable due to hardware limitations (the server broke when stress-testing more users), not to mention the research I've done on the topic points to this being a bad practice.
Speaking of research, I've gathered the following possibilities for this rewrite:
Using asynchronous threads with a thread pool of 8 or so threads (will this be able to handle 8,000 users?) or
Using WCF (this seems like the more .NET approach and more intuitive with its callbacks instead of using loops)
I'm leaning more towards WCF right now. Before anyone asks, I have mentioned how this could be a web application instead, but he said no.
Edit (answers to questions):
The threads currently read from the socket (the packet) and parse it (simple string parsing) and depending on the type payload, executes another function. The functions executed are not very resource-intensive.