Categorygithub.com/gotcp/wsocket
repositorypackage
1.0.5
Repository: https://github.com/gotcp/wsocket.git
Documentation: pkg.go.dev

# README

Golang high-performance asynchronous Websocket using Epoll (only supports Linux)

Example

package main

import (
	"fmt"
	"syscall"
	"time"

	"github.com/gotcp/epoll"
	"github.com/gotcp/wsocket"
)

var ws *wsocket.WS

// Asynchronous event
func OnAccept(fd int) {
	fmt.Printf("OnAccept -> %d\n", fd)
}

// Asynchronous event
func OnUpgrade(fd int) {
	fmt.Printf("OnUpgrade -> %d\n", fd)
}

// Asynchronous event
func OnReceive(fd int, opcode wsocket.Op, msg []byte) {
	var err = ws.Write(opcode, fd, msg, 3*time.Second)
	if err != nil {
		fmt.Printf("OnReceive -> %d, %v\n", fd, err)
	}
}

// Synchronous event
func OnClose(fd int) {
	fmt.Printf("OnClose -> %d\n", fd)
}

// Asynchronous event
func OnPing(fd int) {
	fmt.Printf("OnPing -> %d\n", fd)
}

// Asynchronous event
func OnPong(fd int) {
	fmt.Printf("OnPong -> %d\n", fd)
}

// Asynchronous event
func OnError(fd int, code epoll.ErrorCode, err error) {
	fmt.Printf("OnError -> %d, %d, %v\n", fd, code, err)
}

func main() {
	var err error

	var rLimit syscall.Rlimit
	if err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
		panic(err)
	}
	rLimit.Cur = rLimit.Max
	if err = syscall.Setrlimit(syscall.RLIMIT_NOFILE, &rLimit); err != nil {
		panic(err)
	}

	// parameters: readBuffer, threads, queueLength
	ws, err = wsocket.New(4096, 3000, 4096)
	if err != nil {
		panic(err)
	}

	ws.OnReceive = OnReceive // must have
	ws.OnError = OnError     // optional

	// ws.OnAccept = OnAccept   // optional
	// ws.OnUpgrade = OnUpgrade // optional
	// ws.OnClose = OnClose     // optional
	// ws.OnPing = OnPing       // optional
	// ws.OnPong = OnPong       // optional

	ws.Start("127.0.0.1", 8002, "/ws")
}