0
我正在構建一個簡單的Slackbot作爲Go的學習體驗,並且我已經擊中了我的第一個障礙:我無法寫回消息給連接!WriteMessage上的Websocket失敗
這是我的主要FUNC:
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 &消息「意外關閉」。
我爲我的websocket庫使用大猩猩,我懷疑這可能是一個與他們的「一個讀者,一個作者」限制相關的併發問題。我已經嘗試了一些調整,但說實話只是不太瞭解languge/library還沒有深入調試。 : -/
我敢肯定我錯過了一些明顯的東西!管理我的作家讓我的機器人回話的任何提示?謝謝!
本例中沒有對連接的併發訪問。併發不是問題。如果您不確定,請使用[race detector](https://golang.org/doc/articles/race_detector.html)運行。該錯誤表明對等關閉連接而沒有關閉握手。對方是否有可能不喜歡發送的消息? (我現在已經鬆懈了)。 –
對Slack很好奇,我查了一下API,發現它使用JSON作爲消息。隨機猜測是Slack關閉了連接,因爲應用程序發送了無效的JSON(字符串「你對我說話?」)。 –
我不知道比賽探測器 - 我馬上檢查一下並報告。很可能我的回覆是畸形的,我沒有考慮到這一點,謝謝! – Alex