goProject/.svn/pristine/de/dec54cf9336a04d99116d54ff6266e992cf946cf.svn-base
2025-01-06 16:21:36 +08:00

101 lines
2.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package websocketServer
import (
"fmt"
"github.com/gorilla/websocket"
"net/http"
webServer "Framework/webServer"
"strconv"
"sync"
"testing"
"time"
)
// 处理HTTP请求
func httpHandler(cxt *webServer.Context) {
msg := "test msg"
cxt.GetResponseWriter().Write([]byte(msg))
}
// websocket连接事件
func onConnFunc(ctx *Context) {
fmt.Printf("new conn, ip: %s %p\n", ctx.GetWebServerContext().GetRequestIP(), ctx)
ctx.SendMessage(websocket.TextMessage, []byte("Hello")) // 返回数据
}
// websocket关闭事件
func onCloseFunc(ctx *Context) {
fmt.Printf("close conn, ip: %s %p\n", ctx.GetWebServerContext().GetRequestIP(), ctx)
}
// websocket接收事件
func onMsgFunc(ctx *Context, msgType int, msgData []byte) {
fmt.Printf("%p ", ctx)
fmt.Println("msg ip:", ctx.GetWebServerContext().GetRequestIP(), "msg type:", msgType, "msg:", string(msgData))
ctx.SendMessage(msgType, []byte("SVR: "+string(msgData))) // 返回数据
// 主动关闭连接测试
if string(msgData) == "close" {
ctx.SendMessage(msgType, []byte("close")) // 返回数据
//time.Sleep(time.Microsecond * 100)
ctx.Close()
}
}
func TestWsServer(t *testing.T) {
var ssl bool = false
var server IServer
if ssl {
server = NewWssServer(":22222", "cert.pem", "key.pem", false)
} else {
server = NewWsServer(":22222", false)
}
server.SetIfDelegate(false)
// 注册HTTP处理函数
server.RegisterHandler("/http", httpHandler, &webServer.HandlerConfig{})
// 设置websocket允许跨域访问
server.GetUpgrader().CheckOrigin = func(r *http.Request) bool {
return true
}
//upgrader := &websocket.Upgrader{
// // 允许跨域
// CheckOrigin: func(r *http.Request) bool {
// return true
// },
//}
//server.SetUpgrader(upgrader)
// 注册websocket处理事件
server.RegisterWebsocketHandler("/websocket", &EventCallbackFuncs{
OnConnFunc: onConnFunc,
OnCloseFunc: onCloseFunc,
OnMsgFunc: onMsgFunc,
}, &webServer.HandlerConfig{})
// 设置广播并发数
server.SetBroadcastConcurrent(2)
// 设置接收到Ping消息时自动回复Pong信息
server.SetAutoPong(true)
// 设置心跳检测信息心跳检测周期10秒缺少2个心跳周期断开连接
server.SetHeartbeatDetectInfo(2, time.Second*10)
// 广播测试
go func() {
var i = 0
for {
time.Sleep(time.Second * 10)
// 广播测试
server.BroadcastMessage(websocket.TextMessage, []byte(strconv.Itoa(i)))
i++
}
}()
wg := sync.WaitGroup{}
server.Start(&wg)
}