Pracuję na serwerze TCP w Go. Teraz chcę powiadomić wszystkie goroutiny, które rozmawiają z klientami, o porzuceniu połączeń, zrzuceniu tego, co mają i zatrzymaniu.
Zamknięcie kanału to sposób na powiadomienie ich wszystkich.
Pytanie brzmi: czy to idiomatyczne Go? Jeśli się mylę; to co powinienem zrobić (dla powiadamiania wszystkich goroutines - coś takiego jak ManualResetEvent w .NET)?
Uwaga: Jestem nowicjuszem w Go, właśnie uczę się i zacząłem z TCP Server, ponieważ napisałem to wcześniej w C #.
Odpowiedzi:
4 dla odpowiedzi № 1Tak, zamknięcie kanału to idiomatyczny sposób komunikacji między Goroutines.
Będziesz musiał przekazać kanał do każdego goroutine podczas jego uruchamiania i sprawdzić kanał z wybranym połączeniem po każdym zdarzeniu sieciowym.
Będziesz także chciał ustawić limity czasu dla zdarzeń sieciowych, aby nie mieć połączeń zawieszonych na zawsze.
1 dla odpowiedzi nr 2
Od wersji 1.7 możesz korzystać z kontekst pakiet.