Шаблоны для многопоточного сетевого сервера на C#
-
02-07-2019 - |
Вопрос
Существуют ли какие-либо шаблоны / паттерны / руководства, которым я могу следовать при проектировании многопоточного сервера?Я не могу найти ничего особенно полезного в Интернете с помощью своих поисковых запросов в Google.
Моя программа запустит поток для прослушивания подключений с помощью TcpListener.Каждое клиентское соединение будет обрабатываться его собственным потоком IClientHandler.Сервер обернет ClientHandler.Обработайте клиент в делегате, вызовите BeginInvoke, а затем перестаньте заботиться об этом.
Мне также нужно иметь возможность полностью отключить поток прослушивания, примеров чего я не нахожу в Интернете.
Я предполагаю, что какая-то комбинация магии блокировки / автоматического задания событий / потоков в сочетании с асинхронными BEGINACEPTCPCLIENT и endacceptcpclient поможет мне достичь этого, но когда дело доходит до сетевого кода, для меня все это уже сделано.Поэтому я должен верить, что есть просто какой-то шаблон, которому я могу следовать и не запутаться полностью в бесчисленных многопоточных угловых примерах, которые, кажется, никогда не станут идеальными.
Спасибо.
Решение
Как ни странно, вы можете найти что-нибудь в Задании по информатике, CSC 512 Задание по программированию 4:Многопоточный сервер С Шаблонами.Хотя это C ++ voodoo, но теория вполне понятна для того, кто умеет работать на C #.
- Акцептор/ Соединитель
- Объект мониторинга
- Потокобезопасный Интерфейс
- Фасад-оболочка
- Ограниченная Блокировка
- Стратегическая Блокировка
- Реактор
- Наполовину синхронизированный /Наполовину асинхронный
- Лидеры / Последователи
Хотя вы можете получить полный список полезных чтений на Главная страница.
Другие советы
Взгляните на этот предыдущий вопрос:
Как свести к минимуму количество потоков, используемых в приложении tcp-сервера?
Это не относится строго к C #, но в нем есть несколько полезных советов.