Websockets读/写

时间:2013-09-16 22:14:43

标签: websocket go

在这里转到/ websockets noob。

我修改了this working example,而不是

io.Copy(ws,ws)

我在做

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

ws.Read()不会为您分配缓冲区,只会读取len(msg),在您的示例中,它为0。

Cf io.Copy来源:

buf := make([]byte, 32*1024)
for {
       nr, er := src.Read(buf)
       if nr > 0 {
            nw, ew := dst.Write(buf[0:nr])