亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個頻道只能收到一條消息

一個頻道只能收到一條消息

Go
慕絲7291255 2021-11-29 19:27:22
我創建了一個全局通道,并且每當 ExampleNewWatcher 內部發生新事件時都會向它發送消息。第一次發生事件時,消息會在通道的接收端收到。但是,第二次發生事件時,我在通道的接收端沒有收到消息。var messages = make(chan string)func ExampleNewWatcher(){  watcher, err := fsnotify.NewWatcher()  if err != nil{    log.Fatal(err)  }  defer watcher.Close(0  done := make(chan bool)  go func(){     for {        select{           case event := <- watcher.Events:              if event.Op&fsnotify.Write == fsnotify.Write{                 log.Println("this logs twice if I create two write events")                 messages <- "this message only gets sent once even if I create two events"              }           case err := <- watcher.Errors:               log.Println("error", err)        }     }  }()  err = watcher.Add("/tmp/watchedfile")  <-done}func Websock(ws *websocket.Conn){   msg := <-messages   log.Println("only one message arrives, even if I create for two events", msg)   err := websocket.Message.Send(ws, msg)}func main(){ go ExampleNewWatcher() //for some reason, the server doesn't run unless I prefix a go routine to this watcher function, but that's another issue ...  http.Handle("/websock", websocket.Handler(Websock)) log.Fatal(http.ListenAndServe(":8000", nil))}
查看完整描述

2 回答

?
LEATH

TA貢獻1936條經驗 獲得超7個贊

您的 WebSock 函數需要包含一個接收循環來接收多個消息。否則,您的函數將終止并且 websocket 連接將被關閉。


查看完整回答
反對 回復 2021-11-29
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

將您的Websock功能修改為:


func Websock(ws *websocket.Conn) {

    for {

        msg := <-messages

        log.Println("only one message arrives, even if I create for two events", msg)

        if err := websocket.Message.Send(ws, msg); err != nil {

            log.Fatal(err)

        }

    }

}


查看完整回答
反對 回復 2021-11-29
  • 2 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號