【发布时间】:2014-05-07 13:46:08
【问题描述】:
我使用 websockets 的 golang 服务器有问题。 服务器打开连接,客户端可以连接,但问题是当服务器开始向客户端发送数据时,客户端连接在一小段时间后关闭。我建议问题出在服务器而不是客户端,因为我尝试使用另一个 Web 客户端连接到服务器,这是同样的问题。我不明白原因!有人可以帮我吗?
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 条消息并退出。如果你把它放在一个循环中,它会工作得很好。
-
我试过了:for { var msg = make([]byte, 512) var n int if n, err = ws.Read(msg); err != nil { log.Fatal(err) break } fmt.Printf("Received: %s.\n", msg[:n]) } 但存在 EOF 错误
-
请发布您正在使用的可运行示例。我可以运行您发布的代码的内容完全符合预期。