WriteMessage上的Websocket失败

时间:2016-12-09 22:27:57

标签: go websocket slack gorilla

我构建了一个简单的Slackbot作为Go的学习体验,我已经遇到了我的第一个障碍:我无法将消息写回连接!

这是我的主要功能:

func main() {
  conn, botId, err := slackInit(os.Getenv("SLACKBOT_TOKEN"))
  if err != nil { return }

  defer conn.Close()
  for {
    _, event, err := conn.ReadMessage()
    if err != nil {
      fmt.Println("Error processing message:", err)
      return
    }

    fmt.Println(string(event))

    message, err := slackGetMessage(event)
    if strings.Contains(message, botId) {
      fmt.Println("Bot was mentioned!")
      resp := []byte("You talkin' to me?")
      err = conn.WriteMessage(1, resp)
      if err != nil {
        fmt.Println("Error writing message:", string(resp))
        return
      }
    }
  }
}

这会侦听并报告没有问题的事件,但只要调用conn.WriteMessage方法就会失败。我从websocket收到致命错误,代码为1006&消息"意外关闭"。

我使用Gorilla作为我的websocket库,我怀疑这可能是一个与他们的"一个读者,一个作家和#34;相关的并发问题。限制。我已经尝试了一些调整,但老实说,对于语言库没有足够的了解还没有真正深入调试这个。 : - /

我确定我在这里遗漏了一些明显的东西!管理我的Writer以让我的机器人回复的任何提示?谢谢!

1 个答案:

答案 0 :(得分:1)

发送到服务器的消息不是服务器所期望的JSON。服务器在没有握手的情况下关闭了连接。