有人可以帮我理解我在做什么错吗,我要做的就是在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/

10-10 04:07