conn

package
v0.5.6 Latest Latest
Warning

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

Go to latest
Published: Oct 23, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package conn 提供连接管理相关的工具。

Index

Constants

This section is empty.

Variables

View Source
var ErrConnectionUnavailable = errors.New("connection unavailable")

ErrConnectionUnavailable 在连接不可用时由 Write 方法返回。

Functions

func Exponential

func Exponential(d time.Duration) time.Duration

Exponential 计算指数退避时间(带 ±50% 抖动),上限 1 分钟。 用于避免重连风暴(thundering herd)。

Types

type AfterFunc

type AfterFunc func(time.Duration) <-chan time.Time

AfterFunc 模仿 time.After,用于控制重连退避时间。

type Dialer

type Dialer func(network, address string) (net.Conn, error)

Dialer 模仿 net.Dial,创建网络连接。 返回的连接必须是并发安全的。

type Manager

type Manager struct {
	// contains filtered or unexported fields
}

Manager 管理一个 net.Conn 的生命周期。

通过 Take 获取连接,通过 Put 报告错误。 当 Put 收到非 nil error 时,当前连接失效,Manager 自动重连(指数退避)。

func NewDefaultManager

func NewDefaultManager(network, address string) *Manager

NewDefaultManager 创建一个使用默认配置的连接管理器。 使用 net.Dial 和 time.After。

func NewManager

func NewManager(d Dialer, network, address string, after AfterFunc) *Manager

NewManager 创建一个连接管理器。

参数:

  • d: 连接创建函数
  • network/address: 传递给 Dialer
  • after: 时间控制函数(测试可注入,生产用 time.After)

func (*Manager) Put

func (m *Manager) Put(err error)

Put 报告连接使用中产生的错误。 非 nil error 会导致当前连接被关闭并触发重连。 Stop 后调用是空操作。

func (*Manager) Stop

func (m *Manager) Stop()

Stop 停止管理器,关闭当前连接,解除所有阻塞的 Take/Put 调用。

func (*Manager) Take

func (m *Manager) Take() net.Conn

Take 返回当前连接,可能为 nil(连接断开或尚未建立)。 Stop 后调用返回 nil。

func (*Manager) Write

func (m *Manager) Write(b []byte) (int, error)

Write 是便捷方法:自动 Take → Write → Put。 当连接不可用时返回 ErrConnectionUnavailable。

注意:Write 不是并发安全的。Take/Put 设计为单 goroutine 使用, 多 goroutine 调用 Write 会导致连接竞争。并发场景应由调用方加锁。

Jump to

Keyboard shortcuts

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