使用gob

时间:2017-08-29 15:49:13

标签: go websocket gorilla redigo

我正在Go中使用websockets编写聊天应用程序。

将有多个聊天室,其目的是将连接到聊天室的所有websockets存储在Redis列表中。

为了在Redis中存储和检索websockets我必须对它们进行编码/解码,并且(在this问题之后)我认为我可以使用gob。

我使用github.com/garyburd/redigo/redis表示Redis,github.com/gorilla/websocket作为我的websocket库。

我的功能如下:

func addWebsocket(room string, ws *websocket.Conn) {
    conn := pool.Get()
    defer conn.Close()

    enc := gob.NewEncoder(ws)

    _, err := conn.Do("RPUSH", room, enc)
    if err != nil {
        panic(err.Error())
    }
}

但是,我收到此错误:

cannot use ws (type *websocket.Conn) as type io.Writer in argument to gob.NewEncoder: *websocket.Conn does not implement io.Writer (missing Write method) have websocket.write(int, time.Time, ...[]byte) error want Write([]byte) (int, error)

这个错误是什么意思?是否需要编码*websocket.Conn错误或类型转换的整个想法?

1 个答案:

答案 0 :(得分:0)

As detailed in the documentationgob.NewEncoder的参数是您希望编写结果的io.Writer。这将返回一个编码器,您传递要编码的对象。它将对对象进行编码并将结果写入编写器。

假设conn是您的redis连接,您需要以下内容:

buff := new(bytes.Buffer)
err := gob.NewEncoder(buff).Encode(ws)
if err != nil {
    // handle error
}
_,err := conn.Do("RPUSH", room, buff.Bytes())