有人可以帮我理解我在做什么错吗,我要做的就是在net.Conn实例(server
)上写一个Ping消息,然后用net.Conn实例上期望的Pong回复。 client
)。
我用一些收到的错误注释了代码。
reader.go
func read(conn net.Conn) {
for {
conn.SetReadDeadline(time.Now().Add(2 * time.Second))
_, op, err := wsutil.ReadClientData(conn)
if err != nil {
log.Printf("wsmanager read: %v", err) // read: write pipe: deadline exceeded
return
}
if op != ws.OpPing {
continue
}
c.conn.SetWriteDeadline(time.Now().Add(3 * time.Second))
if err = wsutil.WriteServerMessage(c.conn, ws.OpPong, []byte{}); err != nil {
log.Printf("wsmanager: send pong error: %v", err)
return
}
}
}
// reader_test.go
client, server := net.Pipe()
go read(server) // starts the loop above
err := wsutil.WriteClientMessage(server, ws.OpPing, []byte{})
if err != nil {
t.Fatalf("failed sending pings message %v", err)
}
_, op, err := wsutil.ReadServerData(client)
if err != nil {
t.Errorf("exp no err, got %v", err)
}
if op != ws.OpPong {
t.Errorf("exp ws.OpPong, got %v", op)
}
最佳答案
感谢您使用此库:)
如文档所述,ReadData函数从连接中读取数据。即应用程序专用数据,而不是控制消息。在这些函数中隐式处理控制帧。如果要阅读任何类型的消息,可以使用wsutil.Reader或普通的ws.Read函数。
https://godoc.org/github.com/gobwas/ws/wsutil#ReadClientData
关于go - gobwas/ws通过网络发送操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61168541/