Also ich habe diesen Codeblock zum Senden einer Nachricht. Die Nachricht, die an c.outChan übergeben wird, wird übertragen, und wenn eine Bestätigung empfangen wird, wird ein "wahr" über den Kanal c.buffer [nr] .signaler gesendet. Dies scheint gut zu funktionieren, aber wenn die Nachricht gelöscht wird (keine Bestätigung erhalten), wird der Timeout-Ausdruck nicht erreicht, sondern es stoppt nur, und ich weiß nicht warum. Hier ist der Code:Golang, warum funktioniert dieses Timeout-Schema nicht?
func (c *uConnection) send(nr uint32) {
//transmitt message
c.outChan <- c.buffer[nr].msg
timeout := make(chan bool, 1)
go func() {
timeoutTimer := time.After(c.retransTime)
<-timeoutTimer
timeout <- true
}()
switch {
case <-c.buffer[nr].signaler:
fmt.Printf("Ack confirmed: %v\n", nr)
case <-timeout:
fmt.Println("-----------timeout-----------\n")
//resending
c.send(nr)
}
}
Was mache ich falsch?
Ich benutze 'case <- time.After (...)' die ganze Zeit. Dieser Ansatz wird als Feedback, das ich von anderen Entwicklern wie dem einfachen Muster bekommen habe, weit übertroffen. – eduncan911
danke für die antwort :) –