WriteMessage 上的 Websocket 失败
Websocket Failure on WriteMessage
我正在构建一个简单的 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 和消息 "unexpected closure" 的致命错误。
我正在为我的 websocket 库使用 Gorilla,我怀疑这可能是与其 "one reader, one writer" 限制相关的并发问题。我已经尝试了一些调整,但老实说,我对 languge/library 还不够了解,还没有真正深入调试它。 :-/
我确定我在这里遗漏了一些明显的东西!有什么管理我的 Writer 让我的机器人回话的技巧吗?谢谢!
发送到服务器的消息不是服务器预期的JSON。服务器没有握手就关闭了连接。
我正在构建一个简单的 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 和消息 "unexpected closure" 的致命错误。
我正在为我的 websocket 库使用 Gorilla,我怀疑这可能是与其 "one reader, one writer" 限制相关的并发问题。我已经尝试了一些调整,但老实说,我对 languge/library 还不够了解,还没有真正深入调试它。 :-/
我确定我在这里遗漏了一些明显的东西!有什么管理我的 Writer 让我的机器人回话的技巧吗?谢谢!
发送到服务器的消息不是服务器预期的JSON。服务器没有握手就关闭了连接。