0

Go/websockets 菜鸟在这里。

我已经修改了这个工作示例,而不是

io.Copy(ws,ws)

我在做

msg := []byte{}
_, err := ws.Read(msg)
_, err = ws.Write(msg)

(为简洁起见省略了打印错误)

对我来说,它看起来一样,但它不起作用。它不读取任何内容(尽管也不返回错误)。在客户端(Chrome/FF)上,当我尝试发送第二条消息时,我得到“ WebSocket 已经处于 CLOSING 或 CLOSED 状态”。

一般来说,read msg -> do something -> write msggolang中for ws的方法是什么?

4

1 回答 1

3

执行此操作时,您读取和写入 0 个字节,您需要分配一个实际的缓冲区大小。而且,它需要在一个循环内。

ws.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])
于 2013-09-16T23:24:55.383 回答