websocket

package module
v1.2.0 Latest Latest
Warning

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

Go to latest
Published: May 29, 2023 License: Apache-2.0 Imports: 7 Imported by: 0

README

websocket组件,包含:基础链接、三种组定义,满足99%的场景

demo code

1、SimpleGroup

单节点的ws组,数据基于内存

// 创建ws管理组
g := simplesub.NewManager()

// 添加ws进组
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    err := g.AddGroup("test", w, r)
    if err != nil {
        fmt.Println(err)
    }
})

// 发送消息进组
go func() {
    for {
        time.Sleep(time.Second * 1)
        err := g.SendMsg("test", "123")
        if err != nil {
            panic(err)
        }
    }
}()

2、multisub group

基于redis,实现每个组一个独立的消息通道,适合大数据

// label 每个建议不一样,防止数据干扰
g := multisub.NewManager(rd, "my_label")
// 设置自定义标签,防止冲突
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    err := g.AddGroup("test", w, r)
    if err != nil {
        fmt.Println(err)
    }
})

go func() {
    for {
        time.Sleep(time.Second * 1)
        err := g.SendMsg("test", "msg")
        if err != nil {
            panic(err)
        }
    }
}()

3、SingleRedisGroup

基于redis,实现所有组共享消息通道,适合不太大的数据

// label 每个建议不一样,防止数据干扰
g := singlesub.NewManager(rd, "my_label")
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    err := g.AddGroupWithExt("test", w, r, &websocket.GroupExtData{
        CloseSendData: "123",
        CloseCallback: func(data interface{}) {
            fmt.Println(data)
        },
    })
    if err != nil {
        fmt.Println(err)
    }
})

go func() {
    for {
        time.Sleep(time.Second * 1)
        err := g.SendMsg("test", "test")
        if err != nil {
            return
        }
    }
}()

4、简单的ws链接

单一的链接

http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    cli, err := websocket.NewWS(w, r, nil)
    if err != nil {
        fmt.Println(err)
    }

    cli.SetDealMsg(func(msg []byte) []byte {
        fmt.Println(msg)
        return msg
    })

    go func(cli *websocket.Client) {
        for {
            time.Sleep(time.Second * 1)
            cli.SendMsg("test")
        }
    }(cli)
})

Documentation

Overview

Package websocket

Package websocket

Package websocket

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	GroupName string
	Group     GroupAPI

	// The websocket connection.
	Conn *websocket.Conn
	// Buffered channel of outbound messages.
	Send chan []byte
	// contains filtered or unexported fields
}

Client is a middleman between the websocket connection and the group.

func NewWS

func NewWS(w http.ResponseWriter, r *http.Request, upgrade *websocket.Upgrader) (*Client, error)

func (*Client) Close

func (c *Client) Close()

func (*Client) Run

func (c *Client) Run()

func (*Client) SendMsg

func (c *Client) SendMsg(msg string)

func (*Client) SetCloseCallback

func (c *Client) SetCloseCallback(f func(data interface{}))

func (*Client) SetData

func (c *Client) SetData(data interface{})

func (*Client) SetDealMsg

func (c *Client) SetDealMsg(f func(msg []byte) []byte)

type GroupAPI

type GroupAPI interface {
	Register(cli *Client)
	UnRegister(cli *Client)
	SendMsg(msg []byte) error
}

type GroupExtData

type GroupExtData struct {
	CloseSendData interface{}
	CloseCallback func(data interface{})
	ReceiveMsg    func(msg []byte) []byte
}

Directories

Path Synopsis
Package config
Package config
Package websocket
Package websocket
Package multisub
Package multisub
Package simplesub
Package simplesub
Package singlesub
Package singlesub

Jump to

Keyboard shortcuts

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