là project được xây dựng trên ngôn ngữ go , là Template khung để dựng dự án microservice cung cấp những công cụ cần thiết để tạo một máy chủ đa mục đích và một template thống nhất để handler request , push trên một code duy nhất mà hỗ trợ tất cả loại kết nối phổ biến
- Hỗ trợ tạo dựng máy chủ GRPC
- Hỗ trợ GRPC Client
- Hỗ trợ tạo dựng máy chủ HTTP/HTTPS ( payload json (application/json) hoặc bin protobuf (application/octet-stream) )
- Hỗ trợ tạo dựng máy chủ HTTP/2 ( payload json (application/json) hoặc bin protobuf (application/octet-stream) )
- Hỗ trợ tạo dựng máy chủ QUIC/3 => inprogress
- Hỗ trợ tạo dựng máy chủ TCP
- Hỗ trợ tạo dựng máy chủ TLS (Hỗ trợ TLS1.2 - TLS1.3)
- Hỗ trợ tạo dựng máy chủ WS (payload json (opCode=text) hoặc bin protobuf (opCode = binary) )
- Hỗ trợ tạo dựng máy chủ WSS
- Hỗ trợ tạo dựng máy chủ UDS (Unix domain socket)
- Hỗ trợ tạo dựng máy chủ UDP
- Hỗ trợ tạo dựng máy chủ DTLS (pre-shared key = 0x86, 0x73, 0x86, 0x65, 0x83 , CipherSuites = TLS_PSK_WITH_AES_256_CCM_8)
package main
import (
"fmt"
"github.com/DungntVccorp/grpc_api/api"
"github.com/DungntVccorp/gserver/gBase"
"github.com/DungntVccorp/gserver/gService"
"github.com/DungntVccorp/libinternal/logger"
"os"
)
type EchoServer struct {
logger *logger.Logger
service *gService.Service
}
func NewEchoServer() (*EchoServer, bool) {
_logger, err := logger.New(logger.Level(logger.Info), logger.LogDestinations{logger.DestinationFile: {}, logger.DestinationStdout: {}},"log.log")
if err != nil {
fmt.Printf("Error => %v", err.Error())
return nil, false
}
grpc_config := gBase.DefaultGrpcConfigOption
grpc_config.Addr = ":1234"
p := EchoServer{
service: gService.NewService("Echo Server", _logger, grpc_config),
logger: _logger,
}
p.service.SvName = "Echo Server"
p.service.SetCallBackRequest(p.HanderRequest)
go p.run()
return &p,true
}
func (p *EchoServer) run() {
p.service.Start()
}
func (p *EchoServer) Wait() {
<-p.service.Done
}
func (p *EchoServer) HanderRequest(request *api.Request, reply *api.Reply) uint32 {
reply.Status = uint32(api.ResultType_OK)
reply.Msg = "OK"
return uint32(api.ResultType_OK)
}
func main() {
s,isOK := NewEchoServer()
if !isOK {
os.Exit(99)
}
s.Wait()
}
done := make(chan struct{})
chReceiveRequest := make(chan *gBase.Payload)
_logger, _ := logger.New(logger.Info, logger.LogDestinations{logger.DestinationFile: {}, logger.DestinationStdout: {}}, "/tmp/server.log")
cf := gBase.DefaultHttp2ConfigOption
cf.Logger = _logger
cf.Tls.Cert = "./certificate.pem"
cf.Tls.Key = "./private.key"
cf.Done = &done
hsv2 := gHTTP.New(cf,chReceiveRequest)
hsv2.Serve()
done := make(chan struct{})
chReceiveRequest := make(chan *gBase.Payload)
_logger, _ := logger.New(logger.Info, logger.LogDestinations{logger.DestinationFile: {}, logger.DestinationStdout: {}}, "/tmp/server.log")
cf := gBase.DefaultDTLSSocketConfigOption
cf.Logger = _logger
cf.Tls.Cert = "./certificate.pem"
cf.Tls.Key = "./private.key"
cf.Done = &done
sv := gDTLS.New(cf,chReceiveRequest)
sv.Serve()
done := make(chan struct{})
chReceiveRequest := make(chan *gBase.Payload)
_logger, _ := logger.New(logger.Info, logger.LogDestinations{logger.DestinationFile: {}, logger.DestinationStdout: {}}, "/tmp/server.log")
cf_dtls := gBase.DefaultDTLSSocketConfigOption
cf_dtls.EncodeType = gBase.Encryption_AES
cf_dtls.Logger = _logger
cf_dtls.Done = &done
dtls := gDTLS.New(cf_dtls,chReceiveRequest)
dtls.Serve()
done := make(chan struct{})
chReceiveRequest := make(chan *gBase.Payload)
_logger, _ := logger.New(logger.Info, logger.LogDestinations{logger.DestinationFile: {}, logger.DestinationStdout: {}}, "/tmp/server.log")
cf_tls := gBase.DefaultTlsSocketConfigOption
cf_tls.Tls.Cert = "/Users/dungnt/Desktop/vivas/certificate.pem"
cf_tls.Tls.Key = "/Users/dungnt/Desktop/vivas/private.key"
cf_tls.Done = &done
cf_tls.EncodeType = gBase.Encryption_AES
cf_tls.Logger = _logger
tls_sv := gTLS.New(cf_tls,chReceiveRequest)
tls_sv.Serve()