Padrões para servidor de rede multithread em C#
-
02-07-2019 - |
Pergunta
Existem modelos/padrões/guias que eu possa seguir para projetar um servidor multithread?Não consigo encontrar nada muito útil on-line em minhas pesquisas no Google.
Meu programa iniciará um thread para escutar conexões usando TcpListener.Cada conexão de cliente será tratada por seu próprio thread IClientHandler.O servidor agrupará clientHandler.HandleClient em um delegado, chamará BeginInvoke e então deixará de se preocupar com isso.
Também preciso ser capaz de desligar o thread de escuta de maneira limpa, algo que não estou encontrando muitos exemplos on-line.
Estou assumindo que alguma mistura de magia de bloqueio/AutoResetEvents/threading combinada com BeginAceptTcpClient assíncrono e EndAcceptTcpClient me levará até lá, mas quando se trata de código de rede, para mim está tudo feito.Portanto, tenho que acreditar que existe algum padrão que posso seguir e não ficar totalmente confuso com a miríade de casos multithread que nunca consigo aperfeiçoar.
Obrigado.
Solução
Curiosamente, você pode encontrar algo em uma tarefa de ciência da computação, CSC 512 Programação de programação 4: servidor multi-thread com padrões. Ao todo, é o vodu C ++, mas a teoria é bastante compreensível para alguém que pode fazer C#.
- Aceitador/ conector
- Monitorar o objeto
- Interface segura de thread
- Fachada de invólucro
- Bloqueio com escopo
- Bloqueio estratégico
- Reator
- Meia sincronização/metade-asincana
- Líderes/seguidores
Ao todo, você pode obter toda a lista de boas leituras no página principal.
Outras dicas
Dê uma olhada nesta pergunta anterior:
Como você minimiza o número de threads usados em um aplicativo de servidor TCP?
Não é estritamente específico do C #, mas contém alguns bons conselhos.