在这里转到/ 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
的方法是什么?
答案 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])