Skip to content

Latest commit

 

History

History
129 lines (101 loc) · 2.49 KB

README-CN.md

File metadata and controls

129 lines (101 loc) · 2.49 KB

Ramix

Go Reference Lint

介绍

简体中文 | English

一款基于 Golang 的轻量级 TCP Server 框架

结构

image

能力

  • 消息路由
  • 路由分组
  • 路由中间件
  • 消息编解码
  • 消息处理队列
  • 消息读写分离
  • 连接心跳检测
  • Hooks
  • 日志能力
  • TLS 支持
  • WebSocket Support

TODO

  • 单元测试

安装

go get -u github.com/ramzeng/ramix

快速开始

服务端

package main

import (
	"github.com/ramzeng/ramix"
	"time"
)

func main() {
	ramix.SetMode(ramix.DebugMode)

	server := ramix.NewServer(
		ramix.WithPort(8899),
	)

	server.UseWorkerPool(ramix.NewRoundRobinWorkerPool(100, 1024))
	server.Use(ramix.Recovery(), ramix.Logger())

	server.RegisterRoute(0, func(context *ramix.Context) {
		_ = context.Connection.SendMessage(context.Request.Message.Event, []byte("pong"))
	})

	server.Serve()
}

客户端

package main

import (
	"fmt"
	"github.com/ramzeng/ramix"
	"net"
	"time"
)

func main() {
	socket, err := net.Dial("tcp4", "127.0.0.1:8899")

	if err != nil {
		fmt.Println("Dial error: ", err)
		return
	}

	encoder := ramix.Encoder{}
	decoder := ramix.Decoder{}

	for {
		message := ramix.Message{
			Event: 0,
			Body:  []byte("ping"),
		}

		message.BodySize = uint32(len(message.Body))

		encodedMessage, err := encoder.Encode(message)

		if err != nil {
			fmt.Println("Encode error: ", err)
			return
		}

		_, err = socket.Write(encodedMessage)

		if err != nil {
			fmt.Println("Write error: ", err)
			return
		}

		buffer := make([]byte, 1024)

		_, err = socket.Read(buffer)

		if err != nil {
			fmt.Println("Read error: ", err)
			return
		}

		message, err = decoder.Decode(buffer)

		if err != nil {
			fmt.Println("Decode error: ", err)
			return
		}

		fmt.Printf("Server message: %s\n", message.Body)

		time.Sleep(time.Second)
	}
}

由 JetBrains 赞助

非常感谢 Jetbrains 为我提供的 IDE 开源许可,让我完成此项目和其他开源项目上的开发工作。

协议

MIT