V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shoaly
V2EX  ›  问与答

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

  •  
  •   shoaly · 2022-02-13 23:27:48 +08:00 · 817 次点击
    这是一个创建于 1000 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请路过的大手子帮忙看看

    
    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
    
    }
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1717 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:45 · PVG 00:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.