signal

module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 16, 2022 License: Apache-2.0

README

Signal信令传输

特性

  • 支持websocket webtransport
  • 类似socket.io结构

使用

  • 导入
go get gitee.com/DreamPublic/signal
  • 整体结构
type Signal interface {
	// OnConnect 客户端连接回调
	OnConnect(cb SignalCallback)
	// OnClose 连接断开回调
	OnClose(cb SignalCallback)
	// Run 运行signal server
	Run() error
}

type Session interface {
	// ID 获取SessionId
	ID() string
	// On 自定义事件回调
	On(header string, cb SessionCallback)
	// Emit 发送消息
	Emit(header string, body string) error
	// Close 关闭连接
	Close()
}
  • webtransport 模式demo
// 此处certFile keyFile必填
signal := webtrans.NewSignal(9998, "key/server.cer", "key/server.key")

signal.OnConnect(func(session proto.Session) {
    zap.L().Info("客户端连接")

    go func() {
        for true {
            now := time.Now()
            err := session.Emit("PING", strconv.FormatInt(now.UnixMilli(), 10))
            if nil != err {
                break
            }
            time.Sleep(time.Second)
        }
    }()

    //session.On("*",...) 代表监听所有事件
    session.On("PING", func(cbStruct proto.SessionCbStruct) {
        zap.L().Info("get data", zap.String("data", cbStruct.Msg))
        _ = session.Emit("PONG", cbStruct.Msg)
    })
})

signal.OnClose(func(session proto.Session) {
    zap.L().Info("客户端断开")
})

err := signal.Run()
if nil != err {
    zap.L().Error("start fail", zap.Error(err))
}

  • websocket 模式demo
//此处certFile keyFile可为空
signal := ws.NewSignal(9997, "key/server.cer", "key/server.key")

signal.OnConnect(func(session proto.Session) {
    zap.L().Info("客户端连接")

    go func() {
        for true {
            now := time.Now()
            err := session.Emit("PING", strconv.FormatInt(now.UnixMilli(), 10))
            if nil != err {
                break
            }
            time.Sleep(time.Second)
        }
    }()

    //session.On("*",...) 代表监听所有事件
    session.On("PING", func(cbStruct proto.SessionCbStruct) {
        zap.L().Info("get data", zap.String("data", cbStruct.Msg))
        _ = session.Emit("PONG", cbStruct.Msg)
    })
})

signal.OnClose(func(session proto.Session) {
    zap.L().Info("客户端断开")
})

err := signal.Run()
if nil != err {
    zap.L().Error("start fail", zap.Error(err))
}

  • 环境变量
STD_LOG=true 控制台输出日志
  • web实现
ws.html         websocket实现
webtrans.html   webtransport实现

Directories

Path Synopsis
pkg
h3
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL