go语言聊天室实现(六)创建HTTP连接,并升级为长连接

我们在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来读取连接中发送的信息内容,再根据内容进行相应的操作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容