writeLoop方法有問題?
func?(conn?*Connection)writeLoop()?{ ???var?( ??????data?[]byte ??????err?error ???) ???select?{ ???case?data?=?<-conn.outChan: ??????if?err?=?conn.wsConnect.WriteMessage(websocket.TextMessage?,?data);?err?!=?nil{ ?????????goto?ERR ??????} ???case?<-conn.closeChan: ??????goto??ERR ???} ???//for{ ???// ???????fmt.Println("發送1:",data?) ??????data?=?<-?conn.outChan??//第一次堵塞在這里??因為此時conn.outChan?為空 ??????fmt.Println("發送2:",data) ???//?if?err?=?conn.wsConnect.WriteMessage(websocket.TextMessage?,?data);?err?!=?nil{ ???//????goto?ERR ???//?} ???// ???// ???//} ERR: ???conn.Close(); }
當第一次發送消息時 會被 select 檢測到? outChan ,當執行到for 時??outChan? 時就變空的了,會堵塞起來,導致一次無法正常發送消息。
2019-09-11
實在看不出有什么問題,兄弟你的理解有誤差吧。第一次發送消息不是放在管道里面嗎?而且forloop比發送之前休先初始化,此時你發送消息放在管道里面了,而forloop不久讀出來了嗎??