gateway

package
v0.4.30 Latest Latest
Warning

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

Go to latest
Published: Jun 9, 2022 License: MIT Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrorClose gateway连接已经关闭的错误信息
	ErrorClose = errors.New("firetower is collapsed")
	// ErrorTopicEmpty topic不存在的错误信息
	ErrorTopicEmpty = errors.New("topic is empty")
)
View Source
var (
	// LogLevel Log Level 支持三种模式
	// INFO 打印所有日志信息
	// WARN 只打印警告及错误类型的日志信息
	// ERROR 只打印错误日志
	LogLevel = "INFO"
	// DefaultWriter 正常日志的默认写入方式
	DefaultWriter io.Writer = os.Stdout
	// DefaultErrorWriter 错误日志的默认写入方式
	DefaultErrorWriter io.Writer = os.Stderr
)
View Source
var (

	// ClusterId 当前实例在集群中的唯一id
	ClusterId int64 = 1

	// DefaultConfigPath 默认配置文件读取路径
	DefaultConfigPath = "./fireTower.toml"
	// TowerLogger 接管系统log t log类型 info log信息
	TowerLogger func(t *FireTower, types, info string)
	// FireLogger 接管链接log t log类型 info log信息
	FireLogger func(f *FireInfo, types, info string)

	// IdWorker 全局唯一id生成器实例
	IdWorker *snowFlakeByGo.Worker
)
View Source
var (
	// ConfigTree 保存配置
	ConfigTree *toml.Tree
)

Functions

func GetIP

func GetIP() (string, error)

GetIP 获取当前服务器ip

func GetTopicManage added in v0.4.22

func GetTopicManage() *socket.TcpClient

func GetTopicManageGrpc added in v0.4.22

func GetTopicManageGrpc() pb.TopicServiceClient

func Init

func Init()

Init 初始化firetower 在调用firetower前请一定要先调用Init方法

Types

type Bucket

type Bucket struct {
	BuffChan chan *socket.SendMessage // bucket的消息处理队列
	// contains filtered or unexported fields
}

Bucket 的作用是将一个实例的连接均匀的分布在多个bucket中来达到并发推送的目的

func (*Bucket) AddSubscribe

func (b *Bucket) AddSubscribe(topic string, bt *FireTower)

AddSubscribe 添加当前实例中的topic->conn的订阅关系

func (*Bucket) DelSubscribe

func (b *Bucket) DelSubscribe(topic string, bt *FireTower)

DelSubscribe 删除当前实例中的topic->conn的订阅关系

type FireInfo

type FireInfo struct {
	Context     *FireLife
	MessageType int
	Message     *TopicMessage
}

FireInfo 接收的消息结构体

func NewFireInfo

func NewFireInfo(t *FireTower, context *FireLife) *FireInfo

NewFireInfo 第二个参数的作用是继承 继承上一个消息体的上下文,方便日志追踪或逻辑统一

func (*FireInfo) Error

func (f *FireInfo) Error(info string)

Error 记录一个ERROR级别的日志

func (*FireInfo) GetContextId added in v0.4.24

func (f *FireInfo) GetContextId() string

func (*FireInfo) Info

func (f *FireInfo) Info(info string)

Info 记录一个INFO级别的日志

func (*FireInfo) Panic

func (f *FireInfo) Panic(info string)

Panic 消息的panic日志 并回收变量

func (*FireInfo) Recycling

func (f *FireInfo) Recycling()

Recycling 变量回收

type FireLife

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

FireLife 客户端推送消息的结构体

type FireTower

type FireTower struct {
	ClientId string // 客户端id 用来做业务逻辑
	UserId   string // 一般业务中每个连接都是一个用户 用来给业务提供用户识别
	Cookie   []byte // 这里提供给业务放一个存放跟当前连接相关的数据信息
	// contains filtered or unexported fields
}

FireTower 客户端连接结构体 包含了客户端一个连接的所有信息

func BuildTower

func BuildTower(ws *websocket.Conn, clientId string) (tower *FireTower)

BuildTower 实例化一个websocket客户端

func (*FireTower) CheckTopicExist

func (t *FireTower) CheckTopicExist(topic string) bool

CheckTopicExist 检测topic是否已经有人订阅

func (*FireTower) Close

func (t *FireTower) Close()

Close 关闭客户端连接并注销 调用该方法会完全注销掉由BuildTower生成的一切内容

func (*FireTower) GetConnectNum

func (t *FireTower) GetConnectNum(topic string) int64

GetConnectNum 获取话题订阅数的grpc方法封装

func (*FireTower) Publish

func (t *FireTower) Publish(fire *FireInfo) error

Publish 推送接口 通过BuildTower生成的实例都可以调用该方法来达到推送的目的

func (*FireTower) Run

func (t *FireTower) Run()

Run 启动websocket客户端

func (*FireTower) Send

func (t *FireTower) Send(message *socket.SendMessage) error

Send 发送消息方法 向某个topic发送某段信息

func (*FireTower) SetBeforeSubscribeHandler

func (t *FireTower) SetBeforeSubscribeHandler(fn func(context *FireLife, topic []string) bool)

SetBeforeSubscribeHandler 订阅前回调事件 用户订阅topic前触发

func (*FireTower) SetOnConnectHandler

func (t *FireTower) SetOnConnectHandler(fn func() bool)

SetOnConnectHandler 建立连接事件

func (*FireTower) SetOnOfflineHandler

func (t *FireTower) SetOnOfflineHandler(fn func())

SetOnOfflineHandler 用户连接关闭时触发

func (*FireTower) SetOnSystemRemove

func (t *FireTower) SetOnSystemRemove(fn func(topic string))

SetOnSystemRemove 系统移除某个用户的topic订阅

func (*FireTower) SetReadHandler

func (t *FireTower) SetReadHandler(fn func(*FireInfo) bool)

SetReadHandler 客户端推送事件 接收到用户publish的消息时触发

func (*FireTower) SetReadTimeoutHandler

func (t *FireTower) SetReadTimeoutHandler(fn func(*FireInfo))

SetReadTimeoutHandler 超时回调 readIn channal写满了 生产 > 消费的情况下触发超时机制

func (*FireTower) SetSubscribeHandler

func (t *FireTower) SetSubscribeHandler(fn func(context *FireLife, topic []string) bool)

SetSubscribeHandler 订阅事件 用户订阅topic后触发

func (*FireTower) SetUnSubscribeHandler

func (t *FireTower) SetUnSubscribeHandler(fn func(context *FireLife, topic []string) bool)

SetUnSubscribeHandler 取消订阅事件 用户取消订阅topic后触发

func (*FireTower) ToSelf

func (t *FireTower) ToSelf(b []byte) error

ToSelf 向自己推送消息 这里描述一下使用场景 只针对当前客户端进行的推送请调用该方法

type FireTowerConfig

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

FireTowerConfig 每个连接的配置信息

type TopicMessage

type TopicMessage struct {
	Topic string          `json:"topic"`
	Data  json.RawMessage `json:"data"` // 可能是个json
	Type  string          `json:"type"`
}

TopicMessage 话题信息结构体

type TowerManager

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

TowerManager 包含中心处理队列和多个bucket bucket的作用是将一个实例的连接均匀的分布在多个bucket中来达到并发推送的目的

var (
	// TM 是一个实例的管理中心
	TM *TowerManager
)

func (*TowerManager) GetBucket

func (t *TowerManager) GetBucket(bt *FireTower) (bucket *Bucket)

GetBucket 获取一个可以分配当前连接的bucket

Jump to

Keyboard shortcuts

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