gobwas / ws Отправлять операции более net .Conn - PullRequest
1 голос
/ 12 апреля 2020

Может ли кто-нибудь помочь мне понять, что я здесь делаю неправильно, все, что я пытаюсь сделать, это написать сообщение Ping поверх экземпляра net .Conn (server) и ответить ожидаемым понгом. на экземпляре net .Conn (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)
     }

1 Ответ

2 голосов
/ 12 апреля 2020

Спасибо за использование этой библиотеки :). Как указано в do c, функции ReadData читают data из соединения; то есть данные приложения c, а не управляющие сообщения. Кадры управления обрабатываются неявно в этих функциях. Если вы хотите прочитать сообщение любого типа, вы можете использовать wsutil.Reader или обычные функции ws.Read.

https://godoc.org/github.com/gobwas/ws/wsutil#ReadClientData

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...