/ / Powiadom wszystkie goroutiny - współbieżność, tcp, równoległe przetwarzanie, idź

Powiadamiaj wszystkie goroutiny - współbieżność, tcp, przetwarzanie równoległe, idź

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 № 1

Tak, 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.