client, err := rpc.Dial("tcp", "127.0.0.1:8088")
if err != nil {
log.Fatal("dialhttp: ", err)
}
defer client.Close()
客户端创建rpc连接client后,我怎么维护这个连接呢,因为我要维持这个长连接,没有数据发送时可以使用发送心跳来维持。我怎么监控服务端是否把我断开了,然后重连。
更多评论
用一个map,为每一个客户端分配一个id,用这个id与服务器通信,然后用一个msg := make(chan string)来监听客户端消息,再用一个leaving := make(chan string)来监听客户端断开的消息,有客户端断开时,向leaving发送本客户端的id,服务端接收后,从map中释放该连接资源即可,当然这是典型的select场景,需要轮询每个客户端的消息,类似于c++的select或者poll,想用异步io,还要更麻烦些。
#2