代码拉取完成,页面将自动刷新
/*
* @Description:
* @Version: 1.0
* @Autor: solid
* @Date: 2022-08-24 18:37:22
* @LastEditors: solid
* @LastEditTime: 2022-09-16 14:56:15
*/
package main
import (
"fmt"
"net/http"
"strings"
"gitee.com/solidone/sutils/swebsocket"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
var Upgrader *websocket.Upgrader = &websocket.Upgrader{
ReadBufferSize: 2 * 1024,
WriteBufferSize: 2 * 1024,
// Allow connections from any Origin
CheckOrigin: func(r *http.Request) bool { return true },
}
type Response struct {
Code int `json:"code"`
Msg string `json:"message"`
Data interface{} `json:"data"`
}
func Connect(ctx *gin.Context) {
wsConn, err := Upgrader.Upgrade(ctx.Writer, ctx.Request, nil)
if err != nil {
fmt.Println(err)
return
}
ClientConn, _ := swebsocket.CreateConn(wsConn, 1)
ClientConn.Handle(func(msg []byte, conn *swebsocket.ServerConn) {
ClientConn.Send <- msg
})
ClientConn.WriteReadLoop()
}
func main() {
router := gin.Default()
//跨域
router.Use(Cors())
router.GET("/ws", Connect)
err := router.Run(":8888")
if err != nil {
fmt.Println("Init http server. Error :", err)
}
}
// 跨域
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method // 请求方法
origin := c.Request.Header.Get("Origin") // 请求头部
var headerKeys []string // 声明请求头keys
for k := range c.Request.Header {
headerKeys = append(headerKeys, k)
}
headerStr := strings.Join(headerKeys, ", ")
if headerStr == "" {
headerStr = "access-control-allow-origin, access-control-allow-headers"
}
if origin != "" {
c.Header("Access-Control-Allow-Origin", origin) // 这是允许访问所有域
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE") // 服务器支持的所有跨域请求的方法,为了避免浏览次请求的多次'预检'请求
// header的类型
c.Header("Access-Control-Allow-Headers", "*")
// 允许跨域设置 可以返回其他子段
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers,Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma,FooBar") // 跨域关键设置 让浏览器可以解析
c.Header("Access-Control-Max-Age", "172800") // 缓存请求信息 单位为秒
c.Header("Access-Control-Allow-Credentials", "true") // 跨域请求是否需要带cookie信息 默认设置为true
c.Set("content-type", "application/json") // 设置返回格式是json
}
// 放行所有OPTIONS方法
if method == "OPTIONS" {
c.JSON(http.StatusOK, "Options Request!")
}
// 处理请求
c.Next() // 处理请求
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。