问一下各位大佬, golang 中 想要给 *websocket.Conn 实现 Reader()接口, 两种方法其中一个失败的原因

2022-02-13 23:27:48 +08:00
 shoaly

请路过的大手子帮忙看看


type WsReaderWriter struct {
	*websocket.Conn
	Rb []byte
}

func (ws_rw *WsReaderWriter) Read(p []byte) (n int, err error) {

	// 方法 1 是我最初想到的, 测试之后会卡住
	// _, reader, err := ws_rw.NextReader()
	// if err != nil {
	// 	return 0, err
	// }
	// n, err = reader.Read(p)
	// log.Print("[read]:", n)
	// return n, err
        

        //方法 2  参考 gost 和其他几个网上例子用一个[]byte 中转的, 这种方法可以通过测试, 代码是跑起来了, 但是没想明白 方法 1 为什么不行, 或者其他人都没这么用
	if len(ws_rw.Rb) == 0 {
		_, ws_rw.Rb, err = ws_rw.ReadMessage()
	}
	n = copy(p, ws_rw.Rb)
	ws_rw.Rb = ws_rw.Rb[n:]
	return

}

814 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/833623

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX