Go/websockets noob here.
我已经修改了这个工作示例,而不是
io.Copy(ws,ws)
我在做
msg := []byte{}
_, err := ws.Read(msg)
_, err = ws.Write(msg)
(为简洁起见,省略了打印错误)
对我来说,它看起来是一样的,但它不起作用。它不读取任何内容(尽管也不会返回错误)。在客户端(Chrome/FF)上,尝试发送第二条消息时,我得到"WebSocket已经处于关闭或关闭状态"。
一般来说,在 golang 中为 ws read msg -> do something -> write msg
的方法是什么?
执行此操作时,读取和写入 0 个字节,需要分配实际的缓冲区大小。而且,它需要在循环中。
唰。read()不会为你分配缓冲区,只会读取len(msg)
,在你的例子中它是0。
Cf io.复制源:
buf := make([]byte, 32*1024)
for {
nr, er := src.Read(buf)
if nr > 0 {
nw, ew := dst.Write(buf[0:nr])