2014-11-04 32 views
0

这几天我正在通过websoket使用Beego框架来发送消息。 但遇到错误信息http:multiple response.WriteHeader calls 问题在哪里? 任何提示都会很棒!Golang http:multiple response.WriteHeader calls

func (this *WsController) Get() { 
    fmt.Println("connected") 
    handler(this.Ctx.ResponseWriter, this.Ctx.Request, this); 
    conn, err := upgrader.Upgrade(this.Ctx.ResponseWriter, this.Ctx.Request, nil) 
    if _, ok := err.(websocket.HandshakeError); ok { 
     http.Error(this.Ctx.ResponseWriter, "Not a websocket handshake", 400) 
     return 
    } else if err != nil { 
     return 
    } 
    fmt.Println("connected") 
    connection := consumer.New(beego.AppConfig.String("LoggregatorAddress"), &tls.Config{InsecureSkipVerify: true}, nil) 

    fmt.Println("===== Tailing messages") 
    msgChan, err := connection.Tail(this.Ctx.Input.Param(":appGuid"), this.Ctx.Input.Param(":token")) 

    if err != nil { 
     fmt.Printf("===== Error tailing: %v\n", err) 
    } else { 
     for msg := range msgChan { 
      // if closeRealTimeLogFlag{ 
      // consumer.Close() 
      // break 
      // } 
      if err = conn.WriteMessage(websocket.TextMessage, msg.Message); err != nil { 
       fmt.Println(err) 
      } 
      fmt.Printf("%v \n", msg) 
     } 
    } 

} 
+1

什么的'handler'功能吗? – Arjan 2014-11-04 11:57:08

+1

http.Error()调用WriteHeader。因此,您的处理程序已经调用WriteHeader或upgradeder.Upgrade调用ResponseWriter上的Writeheader。 – Chrisport 2014-11-04 12:33:51

+5

默认情况下,升级程序会调用http.Error。除非您在升级程序中设置了无操作错误功能,否则不应在应用程序代码中调用http.Error。 – 2014-11-04 15:02:37

回答

-4

,因为你写的多的StatusCode

+2

您应该阅读[答]。 – 2015-07-02 14:29:10