我在使用websockets的golang服務器上遇到問題。 服務器打開連接,客戶端可以連接到它,但問題是,當服務器開始向客戶端發送數據時,客戶端連接會在一段時間後關閉。我建議問題出在服務器上,而不是用客戶端,因爲我試圖用另一個Web客戶端連接到服務器,這是同樣的問題。我不明白原因!有人能幫我嗎?Golang服務器關閉客戶端的連接:websocket
server.go:
func Echo(ws *websocket.Conn) {
fmt.Println("Echoing")
for {
msg := MessageReceived{Name: "OrderCommand", Nbmsg: 3}
if err := websocket.JSON.Send(ws, msg); err != nil {
fmt.Println("Can't send")
break
}
//os.Exit(0)
}
}
func checkError(err error) {
if err != nil {
Log("Fatal error ", err.Error())
os.Exit(1)
}
}
func main() {
http.HandleFunc("/save", saveHandler)
http.Handle("/", websocket.Handler(Echo))
err:= http.ListenAndServe(":8081", nil)
checkError(err)
}
和client.go:
import (
"code.google.com/p/go.net/websocket"
"fmt"
"log"
)
func main() {
origin := "http://localhost/"
url := "ws://localhost:8081/echo"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
log.Fatal(err)
}
var msg = make([]byte, 512)
var n int
if n, err = ws.Read(msg); err != nil {
log.Fatal(err)
}
fmt.Printf("Received: %s.\n", msg[:n])
}
您的客戶只讀取1條消息並退出。如果你把它放在一個循環中,它會工作得很好。 – JimB
我試過了:對於{ \t var msg = make([] byte,512) \t var n int \t if n,err = ws.Read(msg); !ERR =零{ \t \t log.Fatal(ERR) 斷裂 \t} \t fmt.Printf( 「接收:%S \ n」 個,MSG [:N]) },但它以EOF誤差存在 – Farah
請發表您正在使用的可運行示例。我所能發佈的代碼的運行方式與預期完全相同。 – JimB