- make stream fast path honor adaptive soft payload limits end-to-end - split oversized fast-stream payloads into sequential frames before batching - use adaptive soft cap when encoding stream batch payloads - move timeout-like error detection into production code for adaptive tx - tune notify FrameReader read size explicitly to avoid throughput regression - drop local stario replace and depend on released b612.me/stario v0.1.1
102 lines
3.9 KiB
Go
102 lines
3.9 KiB
Go
package notify
|
|
|
|
import (
|
|
"b612.me/stario"
|
|
"context"
|
|
"net"
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type ServerCommon struct {
|
|
msgID uint64
|
|
alive atomic.Value
|
|
status Status
|
|
sessionOwnerState atomic.Int32
|
|
sessionRuntime atomic.Pointer[serverSessionRuntime]
|
|
listener net.Listener
|
|
udpListener *net.UDPConn
|
|
queue *stario.StarQueue
|
|
stopFn context.CancelFunc
|
|
stopCtx context.Context
|
|
maxReadTimeout time.Duration
|
|
maxWriteTimeout time.Duration
|
|
parallelNum int
|
|
wg stario.WaitGroup
|
|
peerRegistry *serverPeerRegistry
|
|
mu sync.RWMutex
|
|
handshakeRsaKey []byte
|
|
SecretKey []byte
|
|
defaultMsgEn func([]byte, []byte) []byte
|
|
defaultMsgDe func([]byte, []byte) []byte
|
|
defaultFastStreamEncode transportFastStreamEncoder
|
|
defaultFastBulkEncode transportFastBulkEncoder
|
|
defaultFastPlainEncode transportFastPlainEncoder
|
|
defaultModernPSKRuntime *modernPSKCodecRuntime
|
|
linkFns map[string]func(message *Message)
|
|
defaultFns func(message *Message)
|
|
noFinSyncMsgMaxKeepSeconds int64
|
|
maxHeartbeatLostSeconds int64
|
|
sequenceDe func([]byte) (interface{}, error)
|
|
sequenceEn func(interface{}) ([]byte, error)
|
|
logicalSession *logicalSessionState
|
|
onFileEvent func(FileEvent)
|
|
fileEventObserver func(FileEvent)
|
|
fileTransferCfg fileTransferConfig
|
|
signalReliableCfg signalReliabilityConfig
|
|
streamRuntime *streamRuntime
|
|
recordRuntime *recordRuntime
|
|
bulkRuntime *bulkRuntime
|
|
bulkOpenTuning BulkOpenTuning
|
|
bulkDedicatedSidecarMu sync.Mutex
|
|
bulkDedicatedSidecars map[*LogicalConn]map[uint32]*bulkDedicatedSidecar
|
|
connectionRetryState *connectionRetryState
|
|
detachedClientKeepSeconds int64
|
|
securityReadyCheck bool
|
|
showError bool
|
|
debugMode bool
|
|
}
|
|
|
|
func NewServer() Server {
|
|
transport := defaultModernPSKTransportBundle()
|
|
var server ServerCommon
|
|
server.wg = stario.NewWaitGroup(0)
|
|
server.parallelNum = 0
|
|
server.noFinSyncMsgMaxKeepSeconds = 0
|
|
server.maxHeartbeatLostSeconds = 300
|
|
server.stopCtx, server.stopFn = context.WithCancel(context.Background())
|
|
server.SecretKey = nil
|
|
server.handshakeRsaKey = defaultRsaKey
|
|
server.peerRegistry = newServerPeerRegistry()
|
|
server.defaultMsgEn = transport.msgEn
|
|
server.defaultMsgDe = transport.msgDe
|
|
server.defaultFastStreamEncode = transport.fastStreamEncode
|
|
server.defaultFastBulkEncode = transport.fastBulkEncode
|
|
server.defaultFastPlainEncode = transport.fastPlainEncode
|
|
server.securityReadyCheck = true
|
|
server.sequenceEn = encode
|
|
server.sequenceDe = Decode
|
|
server.alive.Store(false)
|
|
server.linkFns = make(map[string]func(*Message))
|
|
server.fileTransferCfg = defaultFileTransferConfig()
|
|
server.signalReliableCfg = defaultSignalReliabilityConfig()
|
|
server.logicalSession = newLogicalSessionState(server.fileTransferCfg, server.signalReliableCfg)
|
|
server.streamRuntime = newStreamRuntime("sstrm")
|
|
server.recordRuntime = newRecordRuntime()
|
|
server.bulkRuntime = newBulkRuntime("sblk")
|
|
server.bulkOpenTuning = defaultBulkOpenTuning()
|
|
server.bulkDedicatedSidecars = make(map[*LogicalConn]map[uint32]*bulkDedicatedSidecar)
|
|
server.connectionRetryState = newConnectionRetryState()
|
|
server.onFileEvent = normalizeFileEventCallback(nil)
|
|
server.fileEventObserver = normalizeFileEventCallback(nil)
|
|
server.defaultFns = func(message *Message) {
|
|
return
|
|
}
|
|
server.sessionRuntime.Store(newServerSessionRuntimeBase(server.stopCtx, server.stopFn))
|
|
bindServerStreamControl(&server)
|
|
bindServerBulkControl(&server)
|
|
server.getTransferState().setBuiltinHandler(server.builtinFileTransferHandler)
|
|
return &server
|
|
}
|