登录
首页 >  Golang >  Go问答

gobwas/ws 通过 net.Conn 发送 opPing

来源:stackoverflow

时间:2024-03-06 17:36:30 145浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《gobwas/ws 通过 net.Conn 发送 opPing》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

有人可以帮我理解我在这里做错了什么吗,我想做的就是通过 net.conn 实例(server)编写一条 ping 消息,然后用网络上预期的 pong 回复。 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)
     }

解决方案


感谢您使用这个库:) 正如文档所述,ReadData 函数从连接读取数据;也就是说,应用程序特定的数据,而不是控制消息。控制帧在这些函数中隐式处理。如果您想阅读任何类型的消息,可以使用 wsutil.Reader 或普通的 ws.Read 函数。

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

到这里,我们也就讲完了《gobwas/ws 通过 net.Conn 发送 opPing》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>