0
我創建了一個全局通道,並且在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))
}
如何調用'waitForMessage'?在你的發佈代碼中,你根本不會調用它。 –
@PaulHankin我更新了OP,以顯示如何調用waitForMessage(即它是websocket處理程序)。請注意,我在編輯的代碼中更改了func的名稱 – Leahcim