我们在mian函数中,首先初始化配置文件,然后新建http连接。
func main() {
//读取配置文件
conf.LoadConf()
http.HandleFunc("/ws", ws.IndexHandler)
http.ListenAndServe("0.0.0.0:9999", nil)
}
这个连接创建之后,监听服务器的9999端口。如果url的路径后缀为 "/ws",就转发到ws/ws.go中的IndexHandler方法中。
import "github.com/gorilla/websocket"
var upgrader = websocket.Upgrader{
// 解决跨域问题
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func IndexHandler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
fmt.Println(&conn)
if err != nil {
log.Println(err)
return
}
fmt.Printf("handshake success %v\n",&conn)
conn.WriteMessage(websocket.TextMessage, []byte(fmt.Sprintf("handshake success: %v", &conn)));
common.Client =append(common.Client,conn)
index:=arrays.Contains(common.Client,conn)
fmt.Println("index is :",index)
ctls:=controllers.MessageController{
index,conn,
}
go ctls.GetMessage()
}
这个方法中首先我们创建一个websocket的Upgrader实例,然后我们使用Upgrader的upgrade方法来升级一下我们的连接为长连接。
升级完成之后会返回一个*websocket.Conn的连接,我们之后所有的关于连接的操作,都是基于该conn的。
在该连接完成之后,我们将连接存放到一个名为Client的map中,以便之后管理更为方便。
之后,我们启动一个goroutine来读取连接中发送的信息内容,再根据内容进行相应的操作。