我正在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
错误或类型转换的整个想法?
答案 0 :(得分:0)
As detailed in the documentation,gob.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())