项目初始化
创建项目xh-control-ws
进入目录下进行初始化
1 | go mod init xh-control-ws |
安装依赖
安装依赖库
1 | go get github.com/gorilla/websocket |
基本示例
创建文件main.go
1 | package main |
注意在读消息的时候判断了错误信息,当用户下线的时候也会有错误 ,我们额外判断一下。
1 | messageType, message, err := conn.ReadMessage() |
注意
SetCloseHandler只能监听到正常关闭的事件,非正常关闭的可以使用上面的方式判断
协程发送消息
我们想到的是这样的,但是这样会报错
错误的写法:
1 | func sendMsg(conn *websocket.Conn, msg string) { |
正确的写法:
添加一个对象
1 | type SendMsgModel struct { |
代码中
1 | var broadcast = make(chan model.SendMsgModel) |
连接的标识
1 | fmt.Sprintf("%p", conn) |
连接的IP及端口
1 | conn.RemoteAddr().String() |
这个在服务器上获取到的远程的IP一直是127.0.0.1,即使Nginx配置了header也不起作用,所以不建议作为连接的唯一标识。
1 | map $http_upgrade $connection_upgrade { |
前端测试
1 |
|