socket

package module
v1.0.6 Latest Latest
Warning

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

Go to latest
Published: Aug 1, 2024 License: MIT-0 Imports: 7 Imported by: 0

README

socket

介绍

socket扩展包

软件架构

软件架构说明

安装教程
  1. go get gitee.com/fireManXiong/socket
  2. xxxx
  3. xxxx
使用说明
  1. tcp
package main

import (
	"fmt"
	"net"
	"sync"
	"time"

	"gitee.com/fireManXiong/socket"
)

func main() {
	server := socket.NewTCPServer(socket.TCPServerConfig{
		ReadBufferSize: 1024 * 1024,
	})
	wait := sync.WaitGroup{}
	wait.Add(4000)
	server.Listen("tcp", "127.0.0.1:8080")
	server.OnOpen(func(conn net.Conn) {
		fmt.Println("New connection:", conn.RemoteAddr().String())
		go func() {
			for i := 0; i < 2000; i++ {
				server.Emit(conn, socket.Pack(socket.Msg{
					ID:   2,
					Data: []byte("Hello,Client!"),
				}))
			}
		}()
		go func() {
			for i := 0; i < 2000; i++ {
				server.Emit(conn, socket.Pack(socket.Msg{
					ID:   2,
					Data: []byte("Hello,Client!"),
				}))
			}
		}()
	})
	client := socket.NewTCPClient()

	client.OnEvent(func(conn net.Conn, data []byte) {
		for _, msg := range socket.UnPack(data) {
			fmt.Println("Received data from", conn.RemoteAddr().String(), ":", msg.ID, string(msg.Data))
			wait.Done()
		}
	})
	client.Dial("tcp", "127.0.0.1:8080")
	done := make(chan bool)
	go func() {
		<-time.After(time.Second * 1)
		done <- true
	}()
	go func() {
		wait.Wait()
		done <- true
	}()
	select {
	case <-done:
	}
}
  1. ws
package main

import (
	"fmt"
	"net/http"
	"sync"
	"time"

	"gitee.com/fireManXiong/socket"
	"github.com/gorilla/websocket"
)

func main() {
	server := socket.NewWSServer(socket.WSServerConfig{
		Upgrader: &websocket.Upgrader{
			ReadBufferSize:  1024 * 1024,
			WriteBufferSize: 1024 * 1024,
			CheckOrigin:     func(r *http.Request) bool { return true },
		},
		// OnHandler: func(res http.ResponseWriter, req *http.Request) bool {
		// 	return true
		// },
	})
	wait := sync.WaitGroup{}
	wait.Add(4000)
	server.OnOpen(func(conn *websocket.Conn) {
		fmt.Println("New connection:", conn.RemoteAddr().String())
		go func() {
			for i := 0; i < 2000; i++ {
				server.Emit(conn, socket.Pack(socket.Msg{
					ID:   2,
					Data: []byte("Hello,Client!"),
				}))
			}
		}()
		go func() {
			for i := 0; i < 2000; i++ {
				server.Emit(conn, socket.Pack(socket.Msg{
					ID:   2,
					Data: []byte("Hello,Client!"),
				}))
			}
		}()
	})
	server.Listen("127.0.0.1:8080", "/")
	client := socket.NewWSClient()
	client.OnEvent(func(conn *websocket.Conn, data []byte) {
		for _, msg := range socket.UnPack(data) {
			fmt.Println("Received data from", conn.RemoteAddr().String(), ":", msg.ID, string(msg.Data))
			wait.Done()
		}
	})
	client.Dial("ws://127.0.0.1:8080/", nil)
	done := make(chan bool)
	go func() {
		<-time.After(time.Second * 1)
		done <- true
	}()
	go func() {
		wait.Wait()
		done <- true
	}()
	select {
	case <-done:
	}
}

  1. xxxx
参与贡献
  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
特技
  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type TCPClient

type TCPClient interface {
	Dial(network, address string) error
	OnEvent(id int32, f func(conn net.Conn, data []byte))
	OnOpen(func(conn net.Conn))
	OnClose(func(conn net.Conn))
	Emit(conn net.Conn, id int32, data []byte)
}

func NewTCPClient

func NewTCPClient(config ...TCPClientConfig) TCPClient

type TCPClientConfig

type TCPClientConfig struct {
	ReadBufferSize  int
	CallMaxWaitTime time.Duration
}

type TCPServer

type TCPServer interface {
	Listen(network string, address string) error
	OnEvent(id int32, f func(conn net.Conn, data []byte))
	OnOpen(func(conn net.Conn))
	OnClose(func(conn net.Conn))
	Emit(conn net.Conn, id int32, data []byte)
}

func NewTCPServer

func NewTCPServer(config ...TCPServerConfig) TCPServer

type TCPServerConfig

type TCPServerConfig struct {
	ReadBufferSize int
}

type WSClient

type WSClient interface {
	Dial(address string, requestHeader http.Header) error
	OnOpen(f func(conn *websocket.Conn))
	OnClose(f func(conn *websocket.Conn))
	OnEvent(id int32, f func(conn *websocket.Conn, data []byte))
	Emit(conn *websocket.Conn, id int32, data []byte)
	GetConn() *websocket.Conn
	IsClosed() bool
}

func NewWSClient

func NewWSClient(config ...WSClientConfig) WSClient

type WSClientConfig added in v1.0.5

type WSClientConfig struct {
	CallMaxWaitTime time.Duration
}

type WSServer

type WSServer interface {
	Listen(mAddr, cAddr string) error
	OnOpen(f func(conn *websocket.Conn, req *http.Request))
	OnClose(f func(conn *websocket.Conn))
	OnEvent(id int32, f func(conn *websocket.Conn, data []byte))
	Emit(conn *websocket.Conn, id int32, data []byte)
}

func NewWSServer

func NewWSServer(config ...WSServerConfig) WSServer

type WSServerConfig

type WSServerConfig struct {
	Upgrader  *websocket.Upgrader
	OnHandler func(res http.ResponseWriter, req *http.Request) bool
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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