1 Star 0 Fork 0

solid / sutils

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
main.go 3.26 KB
一键复制 编辑 原始数据 按行查看 历史
Solid 提交于 2024-02-01 13:57 . 添加简单的webrtc和添加简单示例
/*
* @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() // 处理请求
}
}
Go
1
https://gitee.com/solidone/sutils.git
git@gitee.com:solidone/sutils.git
solidone
sutils
sutils
f1241d18e4eb

搜索帮助