fix: close stream adaptive gaps and switch notify to stario v0.1.1
- 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
This commit is contained in:
@@ -35,6 +35,7 @@ type ClientCommon struct {
|
||||
fastStreamEncode transportFastStreamEncoder
|
||||
fastBulkEncode transportFastBulkEncoder
|
||||
fastPlainEncode transportFastPlainEncoder
|
||||
modernPSKRuntime *modernPSKCodecRuntime
|
||||
handshakeRsaPubKey []byte
|
||||
SecretKey []byte
|
||||
noFinSyncMsgMaxKeepSeconds int
|
||||
@@ -55,6 +56,26 @@ type ClientCommon struct {
|
||||
streamRuntime *streamRuntime
|
||||
recordRuntime *recordRuntime
|
||||
bulkRuntime *bulkRuntime
|
||||
bulkDefaultOpenMode BulkOpenMode
|
||||
bulkNetworkProfile BulkNetworkProfile
|
||||
bulkOpenTuning BulkOpenTuning
|
||||
bulkDedicatedAttachLimit int
|
||||
bulkDedicatedAttachSem chan struct{}
|
||||
bulkDedicatedAttachRetry int
|
||||
bulkDedicatedAttachBackoff time.Duration
|
||||
bulkDedicatedDialTimeout time.Duration
|
||||
bulkDedicatedHelloTimeout time.Duration
|
||||
bulkDedicatedActiveLimit int
|
||||
bulkDedicatedActive atomic.Int32
|
||||
bulkDedicatedActiveWait chan struct{}
|
||||
bulkDedicatedLaneLimit int
|
||||
bulkDedicatedSidecarMu sync.Mutex
|
||||
bulkDedicatedLanes map[uint32]*bulkDedicatedLane
|
||||
bulkDedicatedNextLaneID uint32
|
||||
bulkAttachAttemptCount atomic.Int64
|
||||
bulkAttachRetryCount atomic.Int64
|
||||
bulkAttachSuccessCount atomic.Int64
|
||||
bulkAttachFallbackCount atomic.Int64
|
||||
connectionRetryState *connectionRetryState
|
||||
securityReadyCheck bool
|
||||
debugMode bool
|
||||
@@ -63,21 +84,32 @@ type ClientCommon struct {
|
||||
func NewClient() Client {
|
||||
transport := defaultModernPSKTransportBundle()
|
||||
var client = ClientCommon{
|
||||
maxReadTimeout: 0,
|
||||
maxWriteTimeout: 0,
|
||||
peerIdentity: newClientPeerIdentity(),
|
||||
sequenceEn: encode,
|
||||
sequenceDe: Decode,
|
||||
keyExchangeFn: aesRsaHello,
|
||||
SecretKey: nil,
|
||||
handshakeRsaPubKey: defaultRsaPubKey,
|
||||
msgEn: transport.msgEn,
|
||||
msgDe: transport.msgDe,
|
||||
fastStreamEncode: transport.fastStreamEncode,
|
||||
fastBulkEncode: transport.fastBulkEncode,
|
||||
fastPlainEncode: transport.fastPlainEncode,
|
||||
skipKeyExchange: true,
|
||||
securityReadyCheck: true,
|
||||
maxReadTimeout: 0,
|
||||
maxWriteTimeout: 0,
|
||||
peerIdentity: newClientPeerIdentity(),
|
||||
sequenceEn: encode,
|
||||
sequenceDe: Decode,
|
||||
keyExchangeFn: aesRsaHello,
|
||||
SecretKey: nil,
|
||||
handshakeRsaPubKey: defaultRsaPubKey,
|
||||
msgEn: transport.msgEn,
|
||||
msgDe: transport.msgDe,
|
||||
fastStreamEncode: transport.fastStreamEncode,
|
||||
fastBulkEncode: transport.fastBulkEncode,
|
||||
fastPlainEncode: transport.fastPlainEncode,
|
||||
skipKeyExchange: true,
|
||||
securityReadyCheck: true,
|
||||
bulkDefaultOpenMode: BulkOpenModeShared,
|
||||
bulkNetworkProfile: BulkNetworkProfileDefault,
|
||||
bulkOpenTuning: defaultBulkOpenTuning(),
|
||||
bulkDedicatedAttachLimit: defaultBulkDedicatedAttachLimit,
|
||||
bulkDedicatedAttachRetry: defaultBulkDedicatedAttachRetry,
|
||||
bulkDedicatedAttachBackoff: defaultBulkDedicatedAttachBackoff,
|
||||
bulkDedicatedDialTimeout: defaultBulkDedicatedDialTimeout,
|
||||
bulkDedicatedHelloTimeout: defaultBulkDedicatedHelloTimeout,
|
||||
bulkDedicatedActiveLimit: defaultBulkDedicatedActiveLimit,
|
||||
bulkDedicatedActiveWait: make(chan struct{}),
|
||||
bulkDedicatedLaneLimit: defaultBulkDedicatedLaneLimit,
|
||||
}
|
||||
client.alive.Store(false)
|
||||
client.useHeartBeat = true
|
||||
@@ -93,6 +125,10 @@ func NewClient() Client {
|
||||
client.streamRuntime = newStreamRuntime("cstrm")
|
||||
client.recordRuntime = newRecordRuntime()
|
||||
client.bulkRuntime = newBulkRuntime("cblk")
|
||||
client.bulkDedicatedLanes = make(map[uint32]*bulkDedicatedLane)
|
||||
if client.bulkDedicatedAttachLimit > 0 {
|
||||
client.bulkDedicatedAttachSem = make(chan struct{}, client.bulkDedicatedAttachLimit)
|
||||
}
|
||||
client.connectionRetryState = newConnectionRetryState()
|
||||
client.onFileEvent = normalizeFileEventCallback(nil)
|
||||
client.fileEventObserver = normalizeFileEventCallback(nil)
|
||||
@@ -103,3 +139,12 @@ func NewClient() Client {
|
||||
client.getTransferState().setBuiltinHandler(client.builtinFileTransferHandler)
|
||||
return &client
|
||||
}
|
||||
|
||||
func (c *ClientCommon) maxWriteTimeoutSnapshot() time.Duration {
|
||||
if c == nil {
|
||||
return 0
|
||||
}
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
return c.maxWriteTimeout
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user