gpt4 book ai didi

websocket - Golang Server关闭客户端: websocket的连接

转载 作者:IT王子 更新时间:2023-10-29 01:53:17 24 4
gpt4 key购买 nike

我使用 websockets 的 golang 服务器有问题。服务器打开连接,客户端可以连接到它,但问题是当服务器开始向客户端发送数据时,客户端连接会在一小段时间后关闭。我建议问题出在服务器而不是客户端,因为我试图用另一个网络客户端连接到服务器,这是同样的问题。我不明白原因!有人可以帮助我吗?

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])
}

最佳答案

正如其他人所指出的,您的问题是您还必须收到一条消息。

目前,当有人连接时,您的程序将进入 for 循环并开始用消息轰炸客户端。可能不是回显服务器的预期行为。

首先您想接收一条消息,然后发送一个回复:

func Echo(ws *websocket.Conn) {
fmt.Println("Echoing")

msg := new(MessageReceived)

for {
// The server blocks here until a message from the client is received
websocket.JSON.Receive(ws, &msg)

fmt.Printf("Received message: %+v\n", msg)

// Reencode the same message and send it back
if err := websocket.JSON.Send(ws, msg); err != nil {
fmt.Println("Can't send echo")
break
}
}
}

可以在 Playground 找到完整的工作版本:http://play.golang.org/p/nQ3fJ5Nb0I

由于它使用了websockets,所以你必须在你的本地计算机上编译它。

关于websocket - Golang Server关闭客户端: websocket的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23519610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com