0
我想收聽多個傳輸編碼響應的HTTP流,然後逐行讀取消息,然後將消息推送到一個通道。然後我想從頻道中讀取並稍後通過websocket。HTTP分塊流式傳輸到WebSocket
func subscribe(ws chan<- string, group string) (scanner *bufio.Scanner, err error){
res, _ := req(STREAM_URL, channelTemplate(group))
reader := bufio.NewScanner(res.Body)
return reader, reader.Err()
}
func main() {
ws := make(chan string)
request, _ := http.NewRequest("GET", URL, nil)
request.Header.Add("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(request)
ac := ACResponse{}
json.NewDecoder(resp.Body).Decode(&ac)
resp.Body.Close()
var scanners = make([]*bufio.Scanner, 0)
for _, group := range ac.Groups {
fmt.Println("Started worker for", group)
//listen to all stream URLs
scanner, err := subscribe(ws, group)
if err != nil {
panic(err)
}
// keep track of Scanner to read later
scanners = append(scanners, scanner)
}
for {
select {
case msg := <-ws:
fmt.Println("[events] ", msg)
default:
randScanner := rand.Intn(len(ac.Groups)-1)
fmt.Println("Reading from", randScanner)
reader := scanners[randScanner]
reader.Scan()
if err := reader.Err(); err != nil {
panic(err)
}
text := reader.Text()
ws <- text
}
}
}
該程序阻止在reader.Scan()
。輸出是Reading from 1
,沒有別的。我看着wireshark,消息正在通過。
我怎樣才能更好地使用Go來設計這個問題?
標題中提到的websocket代碼在哪裏?爲了調試這個,通過發送一個SIQUIT進程來打印goroutine棧。這可能會讓你對程序停滯的地方有所瞭解。 –
交叉發佈在這裏:https://groups.google.com/d/topic/golang-nuts/dQu1AU38F8Y/discussion – JimB
尚未編寫websocket代碼,我只想確認它與stdout的工作。 – viperfx