vRp.CD2g_test/server/client
kercylan98 22449ff5c3 docs: 优化 README.md 可读性 2024-01-15 17:27:02 +08:00
..
README.md docs: 优化 README.md 可读性 2024-01-15 17:27:02 +08:00
client.go refactor: 迁移 concurrent.Pool 至 hub.ObjectPool,并将 concurrent 包更名为 hub 2024-01-12 12:34:09 +08:00
client_core.go perf: 提高消息吞吐量,降低消息延迟 2023-09-01 14:31:25 +08:00
client_events.go refactor: 调整 server 数据包相关处理函数的接收参数不再为 server.Packet,同时移除 server.Packet 2023-08-23 19:29:55 +08:00
client_test.go feat: server 包 Server 新增 RegMessageReadyEvent 函数 2023-09-05 16:03:58 +08:00
generic.go feat: client 包增加 tcp 客户端 2023-08-24 12:19:06 +08:00
packet.go refactor: 调整 server 数据包相关处理函数的接收参数不再为 server.Packet,同时移除 server.Packet 2023-08-23 19:29:55 +08:00
tcp.go perf: 提高消息吞吐量,降低消息延迟 2023-09-01 14:31:25 +08:00
uds.go perf: 提高消息吞吐量,降低消息延迟 2023-09-01 14:31:25 +08:00
uds_test.go refactor: 调整 server 数据包相关处理函数的接收参数不再为 server.Packet,同时移除 server.Packet 2023-08-23 19:29:55 +08:00
websocket.go refactor: client 包采用无界缓冲区替代通过 chan 实现的写通道,移除消息堆积功能,优化代码逻辑 2023-09-19 12:40:16 +08:00

README.md

Client

Go doc

暂无介绍...

目录导航

列出了该 package 下所有的函数及类型定义,可通过目录导航进行快捷跳转 ❤️

展开 / 折叠目录导航

包级函数定义

函数名称 描述
NewClient 创建客户端
CloneClient 克隆客户端
NewTCP 暂无描述...
NewUnixDomainSocket 暂无描述...
NewWebsocket 创建 websocket 客户端

类型定义

类型 名称 描述
STRUCT Client 客户端
INTERFACE Core 暂无描述...
STRUCT ConnectionClosedEventHandle 暂无描述...
STRUCT Packet 暂无描述...
STRUCT TCP 暂无描述...
STRUCT UnixDomainSocket 暂无描述...
STRUCT Websocket websocket 客户端

详情信息

func NewClient(core Core) *Client

创建客户端


func CloneClient(client *Client) *Client

克隆客户端


func NewTCP(addr string) *Client


func NewUnixDomainSocket(addr string) *Client


func NewWebsocket(addr string) *Client

创建 websocket 客户端


Client STRUCT

客户端

type Client struct {
	*events
	core           Core
	mutex          sync.Mutex
	closed         bool
	pool           *hub.ObjectPool[*Packet]
	loop           *writeloop.Channel[*Packet]
	loopBufferSize int
	block          chan struct{}
}

func (*Client) Run(block ...bool) error

运行客户端,当客户端已运行时,会先关闭客户端再重新运行

  • block 以阻塞方式运行

func (*Client) RunByBufferSize(size int, block ...bool) error

指定写入循环缓冲区大小运行客户端,当客户端已运行时,会先关闭客户端再重新运行

  • block 以阻塞方式运行

func (*Client) IsConnected() bool

是否已连接


func (*Client) Close(err ...error)

关闭


func (*Client) WriteWS(wst int, packet []byte, callback ...func (err error))

向连接中写入指定 websocket 数据类型

  • wst: websocket模式中指定消息类型
查看 / 收起单元测试

func TestClient_WriteWS(t *testing.T) {
	var wait sync.WaitGroup
	wait.Add(1)
	srv := server.New(server.NetworkWebsocket)
	srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
		srv.Shutdown()
	})
	srv.RegStopEvent(func(srv *server.Server) {
		wait.Done()
	})
	srv.RegMessageReadyEvent(func(srv *server.Server) {
		cli := client.NewWebsocket("ws://127.0.0.1:9999")
		cli.RegConnectionOpenedEvent(func(conn *client.Client) {
			conn.WriteWS(2, []byte("Hello"))
		})
		if err := cli.Run(); err != nil {
			panic(err)
		}
	})
	if err := srv.Run(":9999"); err != nil {
		panic(err)
	}
	wait.Wait()
}


func (*Client) Write(packet []byte, callback ...func (err error))

向连接中写入数据


func (*Client) GetServerAddr() string

获取服务器地址


Core INTERFACE

type Core interface {
	Run(runState chan error, receive func(wst int, packet []byte))
	Write(packet *Packet) error
	Close()
	GetServerAddr() string
	Clone() Core
}

ConnectionClosedEventHandle STRUCT

type ConnectionClosedEventHandle func(conn *Client, err any)

Packet STRUCT

type Packet struct {
	wst      int
	data     []byte
	callback func(err error)
}

TCP STRUCT

type TCP struct {
	conn   net.Conn
	addr   string
	closed bool
}

func (*TCP) Run(runState chan error, receive func (wst int, packet []byte))


func (*TCP) Write(packet *Packet) error


func (*TCP) Close()


func (*TCP) GetServerAddr() string


func (*TCP) Clone() Core


UnixDomainSocket STRUCT

type UnixDomainSocket struct {
	conn   net.Conn
	addr   string
	closed bool
}

func (*UnixDomainSocket) Run(runState chan error, receive func (wst int, packet []byte))


func (*UnixDomainSocket) Write(packet *Packet) error

查看 / 收起单元测试

func TestUnixDomainSocket_Write(t *testing.T) {
	var closed = make(chan struct{})
	srv := server.New(server.NetworkUnix)
	srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
		t.Log(string(packet))
		conn.Write(packet)
	})
	srv.RegStartFinishEvent(func(srv *server.Server) {
		time.Sleep(time.Second)
		cli := client.NewUnixDomainSocket("./test.sock")
		cli.RegConnectionOpenedEvent(func(conn *client.Client) {
			conn.Write([]byte("Hello~"))
		})
		cli.RegConnectionReceivePacketEvent(func(conn *client.Client, wst int, packet []byte) {
			t.Log(packet)
			closed <- struct{}{}
		})
		if err := cli.Run(); err != nil {
			panic(err)
		}
	})
	go func() {
		if err := srv.Run("./test.sock"); err != nil {
			panic(err)
		}
	}()
	<-closed
	srv.Shutdown()
}


func (*UnixDomainSocket) Close()


func (*UnixDomainSocket) GetServerAddr() string


func (*UnixDomainSocket) Clone() Core


Websocket STRUCT

websocket 客户端

type Websocket struct {
	addr   string
	conn   *websocket.Conn
	closed bool
	mu     sync.Mutex
}

func (*Websocket) Run(runState chan error, receive func (wst int, packet []byte))


func (*Websocket) Write(packet *Packet) error


func (*Websocket) Close()


func (*Websocket) GetServerAddr() string


func (*Websocket) Clone() Core