效果:
客户端通过ws连接后,服务端会收到连接成功提示,接着服务端会持续监听来自客户端发送过来的内容(这期间会一直造成阻塞),一旦监听到内容就会让服务端去控制台输入消息内容,输入完消息内容后,ws连接就会把刚刚服务端输入的消息内容写回给客户端。这个案例实现了一应一答的功能。
需要的包:
go get "github.com/gin-gonic/gin"
go get "github.com/gorilla/websocket"
代码实现:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
)
func NewConnection(c *gin.Context) {
ws, err := websocket.Upgrade(c.Writer, c.Request, nil, 1024, 1024)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"msg": "服务端错误",
})
return
}
defer ws.Close()
fmt.Println("连接成功开始通信")
//服务端发送给客户端的消息变量
var webMessage string
// 开始通信
for {
//一直读(阻塞)
msgType, msg, err := ws.ReadMessage()
if err != nil {
fmt.Println("webSocket read error")
return
}
fmt.Println("服务端收到的消息:", string(msg))
//控制台获取服务端的输入
fmt.Scan(&webMessage)
//写回给客户端(写的内容是控制台获取服务端的输入内容)
err = ws.WriteMessage(msgType, []byte(webMessage))
if err != nil {
fmt.Println("webSocket write error")
return
}
}
}
func main() {
r := gin.Default()
r.GET("/wsping", NewConnection)
r.Run("127.0.0.1:8080")
}
接着去支持ws连接测试的网站去输入 ws://127.0.0.1:8080/wsping 尝试