Шаблоны для многопоточного сетевого сервера в С#
Существуют ли какие-либо шаблоны/шаблоны/руководства для проектирования многопоточного сервера? Я не могу найти ничего страшного в Интернете через мои поисковые запросы.
Моя программа запустит поток для прослушивания соединений с помощью TcpListener.
Каждое клиентское соединение будет обрабатываться собственным потоком IClientHandler. Сервер будет завершать clientHandler.HandleClient в делегате, вызывать BeginInvoke, а затем прекратить заботу об этом.
Мне также нужно иметь возможность полностью отключить прослушивающий поток, что я не нахожу много примеров онлайн.
Я предполагаю, что некоторые комбинации lock/AutoResetEvents/threading magic в сочетании с async BeginAceptTcpClient и EndAcceptTcpClient меня доставят, но когда дело доходит до сетевого кода, для меня все это было сделано. Поэтому я должен поверить в то, что там есть какая-то модель, в которой я могу следовать, а не быть полностью смущенной множеством многопоточных угловых случаев, которые я никогда не могу улучшить.
Спасибо.
Ответы
Ответ 1
Как ни странно, вы можете найти что-то в задании Computer Science, CSC 512 Назначение программирования 4: Многопоточный сервер с шаблонами. Хотя это С++ voodoo, но теория вполне понятна для тех, кто может делать С#.
Наверху вы можете получить весь список хороших чтений на главной странице .
Ответ 2
Взгляните на этот предыдущий вопрос:
Как вы минимизируете количество потоков, используемых в приложении tcp-сервера?
Это не строго С# конкретный, но он имеет несколько хороших советов.