Wie der broadcast-Nachricht über den Kanal

Bin ich neu zu gehen, und ich bin versucht, zu erstellen eine einfache chat-server, wo die clients können broadcast-Nachrichten an alle verbundenen clients.

In meinem server, ich habe eine goroutine (unendliche Schleife) akzeptiert die Verbindung und alle verbindungen erhalten werden, die durch einen Kanal.

go func() {
    for {
        conn, _ := listener.Accept()
        ch <- conn
        }
}()

Dann starte ich eine Prozedur (goroutine) für jeden angeschlossenen client. Innerhalb der handler, die ich versuche zu broadcast an alle Anschlüsse durch Durchlaufen durch den Kanal.

for c := range ch {
    conn.Write(msg)
}

Kann ich jedoch nicht übertragen, da (ich glaube aus der Lektüre der Dokumente) der Kanal muss geschlossen werden, bevor die Iteration. Ich bin nicht sicher, wenn ich sollte, schließen Sie den Kanal, denn ich möchte ständig neuen verbindungen akzeptiert und schließen der Kanal wird nicht lass mich das machen. Wer kann mir helfen, oder eine bessere Möglichkeit, broadcast-Nachrichten an alle verbundenen clients, würde es geschätzt werden.

Warum denken Sie, dass "Rundfunk" muss ein geschlossener Kanal? Die for c:= range ch - Schleife wird nicht beendet, bis ch ist geschlossen, aber das ist alles.

InformationsquelleAutor Jin Hoon Jeffrey Bang | 2016-04-05

Schreibe einen Kommentar