Я - опытный разработчик С#, но пока не разработал приложение TCP-сервера. Теперь мне нужно разработать высоко масштабируемый и высокопроизводительный сервер, который может обрабатывать не менее 5-10 тысяч одновременных подключений: получение байтов-данных через GPRS с устройств GPS.
Общий процесс коммуникации должен выглядеть следующим образом:
- Устройство GPS инициирует подключение к моему серверу
- мой сервер отвечает, если я хочу получить данные
- устройство отправляет данные GPS
- мой сервер отправляет отчет на устройство о его получении (sg like checksum)
- получение новых данных из GPS, reportm, и это происходит снова и снова.
- позднее устройство GPS закрывает соединение
Итак, на моем сервере мне нужно
- отслеживание подключенных/активных клиентов
- закрыть любого клиента со стороны сервера
- поймать событие, когда устройство закрывает соединение
- получить данные байта
- отправить данные клиентам
Я начал читать об этой теме через Интернет, но для меня это был кошмар. Есть много способов, но я не мог узнать, какой из них лучше.
Способы сокета Async кажутся мне лучше, но писать код в этом асинхронном стиле ужасно и нелегко отлаживать.
Итак, мой вопрос: какой, по вашему мнению, лучший способ реализовать высокопроизводительный TCP-сервер в С#? Знаете ли вы какой-либо хороший компонент с открытым исходным кодом для этого? (Я попробовал несколько, но я не мог найти хорошего.)