У меня есть приложение на C#, которое является сервером TCP, слушая порт. GPS-устройства подключаются к этому порту. Приложение принимает клиент TCP и создает новый поток для каждого клиента. Идентификатор клиента поддерживается в хеш-таблице, которая обновляется при подключении клиента. все это работало до 400 единиц. Как только количество единиц увеличилось, сервер не смог обработать все соединения. Соединения постоянно отбрасываются и через некоторое время приводят к выходу серверного процессора и памяти и снижают его. Работа над ним заключалась в том, чтобы открыть еще один экземпляр сервера TCP, который прослушивает другой порт, и отвлек некоторые единицы к этому порту. В настоящее время около 1800 единиц как-то работают в 8 разных портах. Сервер крайне нестабилен, и устройства по-прежнему не могут оставаться на связи. Слишком много проблем ежедневно. Также, используя удаленный доступ для отправки настроек через удаленный порт - это работает только иногда.Обработка TCP-соединения
Пожалуйста, помогите, предложив решение для сокета TCP/потоковой передачи/объединения потоков и т. Д., Которое является масштабируемым и надежным и может использоваться в одном порту.
Этот сервер TCP работает в Windows Server 2008 R2 Enterprise с IIS7 и SQL Server 2008.
Процессор: Intel Xenon CPU E3-1270 V2 @ 3.50GHz
Оперативная память: 32GB система: 64-разрядная операционная система
Благодаря Джонатан
Один-на-клиент просто не будет масштабироваться в Windows. Вам нужно использовать одну из нескольких асинхронных моделей API для создания сетей в .NET. Обратите внимание, что независимо от того, у вас всегда будет предел. Но с базовыми асинхронными вводами-выводами ('BeginXXX()' или методами 'XXXAsync()' в классе NetworkStream' вы должны легко обрабатывать до десятков тысяч подключений, а если вы используете больше эффективные методы 'XXXAsync()' в классе 'Socket' (который отличается от методов async stream), вы должны иметь возможность обрабатывать 100 тысяч. –
Обратите также внимание на то, что вышесказанное предполагает, что остальная часть вашего собственного кода написана хорошо. Существует множество способов, которыми вы можете управлять масштабируемостью на сетевом сервере.Вы не предоставили достаточной информации для тех, кто знает, что такое ваша проблема _actual_, но мы можем с уверенностью сказать, что ваша текущая реализация имеет хотя бы одну известную проблему масштабируемости. –
@PeterDuniho может использовать этот сценарий сокета для настольных ОС Windows, например, Windows 7 Pro x64. При запуске сервера сокетов на настольных ОС тысячи подключений по-прежнему разумны? – khargoosh