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