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("發(fā)送1:",data?) ??????data?=?<-?conn.outChan??//第一次堵塞在這里??因?yàn)榇藭r(shí)conn.outChan?為空 ??????fmt.Println("發(fā)送2:",data) ???//?if?err?=?conn.wsConnect.WriteMessage(websocket.TextMessage?,?data);?err?!=?nil{ ???//????goto?ERR ???//?} ???// ???// ???//} ERR: ???conn.Close(); }
當(dāng)?shù)谝淮伟l(fā)送消息時(shí) 會被 select 檢測到? outChan ,當(dāng)執(zhí)行到for 時(shí)??outChan? 時(shí)就變空的了,會堵塞起來,導(dǎo)致一次無法正常發(fā)送消息。
2019-09-11
實(shí)在看不出有什么問題,兄弟你的理解有誤差吧。第一次發(fā)送消息不是放在管道里面嗎?而且forloop比發(fā)送之前休先初始化,此時(shí)你發(fā)送消息放在管道里面了,而forloop不久讀出來了嗎??