나는 Go와 함께 학습 경험으로 간단한 Slackbot을 구축하고 있으며, 첫 번째 걸림돌을 맞았습니다. 연결에 메시지를 다시 쓸 수 없습니다!WebSocket WriteMessage 오류
여기 내 주요 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 &에서 "unexpected closure"라는 메시지를받습니다.
내 websocket 라이브러리에 Gorilla를 사용하고 있는데, 이는 "독자 한 명, 한 명의 작가"한도와 관련된 동시성 문제 일 수 있습니다. 몇 가지 시도해 보았지만 정직하게도 아직 디버깅에 대한 깊은 지식은 부족합니다. : -/
나는 여기에서 명백한 무엇인가 놓치고 있다고 확신한다! 내 봇이 다시 이야기 할 수 있도록 내 글쓴이를 관리하는 데 필요한 팁이 있습니까? 감사!
이 예에서는 연결에 대한 동시 액세스가 없습니다. 동시성은 문제가 아닙니다. 확실하지 않으면 [경주 탐지기] (https://golang.org/doc/articles/race_detector.html)로 실행하십시오. 이 오류는 피어가 닫는 핸드 셰이크없이 연결을 닫았 음을 나타냅니다. 피어가 보낸 메시지가 마음에 들지 않았을 가능성이 있습니까? (나는 지금 느슨 함에 대해 아무것도 모른다). –
Slack에 대해 궁금해서 API를 검색하여 메시지에 JSON을 사용하는지 확인합니다. 무작위 추측은 응용 프로그램이 유효하지 않은 JSON (문자열 'You talkin'to me?)을 보내서 Slack이 연결을 닫았다는 것입니다. –
나는 경주 탐지기에 대해 몰랐다 - 나는 그것을 곧 점검하고 다시보고 할 것이다. 내 반응이 잘못되었을 가능성이 높습니다. 고려하지 않았습니다. 감사합니다! – Alex