РЕДАКТИРОВАТЬ: Этот ответ относится к .Net 4.0 или более ранним версиям, где WebSockets должны быть реализованы самостоятельно (.NET 4.5 + IIS предоставляет вам решение). Так что это относится только к вашей собственной реализации WebSockets поверх TCP Layer.
Количество сокетов, которые могут обрабатываться .Net, зависит от системы и способа обслуживания сокетов. Читать это: http://msdn.microsoft.com/en-us/library/windows/desktop/ms739169%28v=vs.85%29.aspx
Реализация WebSockets использует асинхронный способ обслуживания приема и отправки данных. Это делает их очень масштабируемыми и не требует много памяти на соединение.
Таким образом, количество подключенных сокетов зависит от сложности логики вашего приложения для каждого соединения и оборудования. В большинстве случаев вы столкнетесь с проблемами производительности при обработке логики приложения, а затем с проблемами производительности, которые будут зависеть только от подключенных сокетов.
Если вы используете собственную реализацию, основанную на необработанных сокетах TCP, то эта информация будет применяться:
На одном сетевом устройстве вы можете связать чуть менее 65 тыс. Сокетов. Это прослушивающие сокеты, которые принимают соединения. В обычных реализациях сервера вы почти никогда не будете использовать больше чем несколько или даже несколько десятых сокетов для принятия соединений.
Клиентских сокетов может быть столько, сколько ваша реализация и память могут обрабатывать.
Существует множество способов обслуживания розеток, что позволяет обрабатывать больше розеток.
Несколько основных моментов:
Блокировка способа подачи розеток приведет к задержке обслуживания каждой розетки. Также неблокирующее чтение клиентских сокетов будет использовать ваш процессор только для проверки наличия каких-либо данных. С огромным количеством розеток это может быть очень дорого.
Поток на сокет клиента будет использовать огромный объем памяти (более 1 МБ на поток), что позволит вам использовать небольшое количество сокетов на физическую систему.
Одним из лучших (imho) вариантов является использование асинхронного сокета. Это позволяет иметь тысячи сокетов, а при хорошей реализации - более десятков или даже сотен тысяч сокетов в одной серверной системе.