简体中文 | English
一款基于 Golang 的轻量级 TCP Server 框架
- 消息路由
- 路由分组
- 路由中间件
- 消息编解码
- 消息处理队列
- 消息读写分离
- 连接心跳检测
- Hooks
- 日志能力
- TLS 支持
- WebSocket Support
- 单元测试
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 为我提供的 IDE 开源许可,让我完成此项目和其他开源项目上的开发工作。
MIT