Skip to content
/ vasc Public

vasc is a development framework based on Go(golang). It support web routing, scheduling, scaling out for distributed systems.

Notifications You must be signed in to change notification settings

marxn/vasc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

85866df · May 27, 2022
Apr 29, 2021
Apr 9, 2021
Apr 9, 2021
Apr 9, 2021
Apr 26, 2021
Apr 9, 2021
Apr 28, 2021
Apr 28, 2021
Apr 24, 2021
Apr 9, 2021
May 27, 2022
May 27, 2022
Apr 9, 2021

Repository files navigation

vasc是什么

vasc是一个基于Go语言(golang)的web服务框架。vasc包括一套用于搭建web服务器的模块和一组用于数据库、Redis、本地缓存以及全局任务调度的框架。

如何获取vasc:

vasc的代码位于github.com/marxn/vasc 开发者在搭建完毕golang开发环境后,使用

go get github.com/marxn/vasc

获取到vasc的代码。在开发者的程序中导入"github.com/marxn/vasc" 就可以使用vasc库了。

如何使用vascserver搭建web服务

下面是一个使用vasc框架搭建的web服务器

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/marxn/vasc"
)

//编写导出模块
func ExportModules() []vasc.VascRoute{
    return []vasc.VascRoute{
        vasc.VascRoute{ProjectName:"vasctest", Version:"1.0.100", Method:"GET",  Route:"/mary", Middleware: vasc.DefaultMiddleware, RouteHandler:  MaryHandler},
        vasc.VascRoute{ProjectName:"vasctest", Version:"1.0.100", Method:"POST", Route:"/bob",  Middleware: vasc.DefaultMiddleware, RouteHandler:  BobHandler}}
}

//vascserver的route机制是基于gin的,因此handler函数的形式与gin保持一致。
func MaryHandler(c *gin.Context) {
    height, exist := c.GetQuery("height")
    if !exist {
        c.JSON(400, gin.H {"error" : gin.H {"code": 400, "message": "Empty height"}})
        return
    }

    //返回结果
    c.JSON(200, gin.H {"code": 200, "message": "Hello Mary, your height is " + height})
}

func BobHandler(c *gin.Context) {
    weight, exist := c.GetQuery("weight")
    if !exist {
        c.JSON(400, gin.H {"error" : gin.H {"code": 400, "message": "Empty weight"}})
        return
    }

    //返回结果
    c.JSON(200, gin.H {"code": 200, "message": "Hello Bob. your weight is " + weight})
}

func main() {
    //设置工程名
    vasc.SetProjectName("mtr-gw")
    
    //初始化服务器框架,此调用解析命令行参数、生成运行日志、建立信号处理机制。
    vasc.InitServer()
    
    //获取配置文件
    profile := vasc.GetProfile()

    //建立pid文件
    vasc.GeneratePidFile() 
    
    //这里可以添加web服务模块。
    vasc.AddModules(ExportModules(profile))
    
    //开始服务.
    vasc.Serve()
    
}

以上代码创建了一个web服务器,它提供两个接口用于查询Mary和Bob的信息。vasc扩充了gin框架提供的HTTP方法,vasc支持FILE方法。用于搭建静态资源服务器。例如,在导出模块表时,可以用以下方式建立一个基于本地文件系统的静态资源下载服务:

func ExportModules() []vasc.VascRoute{
    return []vasc.VascRoute{
        vasc.VascRoute{Method:"FILE", Route:"/b/record", Middleware: vasc.DefaultMiddleware, LocalFilePath: "/var/data/download/"}}
}

如何启动vascserver

上述例子编译通过以后会产生一个名为vascserver的可执行文件。执行vasttest -h,出现以下提示:

Usage of ./maragoserver:
  -listen string
        listening address (default "localhost:8080")
  -log_level string
        log level(debug, info, warning, error) (default "debug")
  -log_path string
        vascserver log file path (default "./")
  -mode string
        running mode(debug, release) (default "release")
  -profile string
        profile for running environment(dev, test, online, ...) (default "dev")

以上提示是vascserver封装的命令行参数信息。例如,可以用以下格式启动vasctest:

vasctest -profile dev -listen locathost:80 -log_level warning -mode release

以上命令启动一个vascserver,监听本地80端口。日志级别是warning。用release模式运行。运行参数(数据库、redis等连接信息)从配置存储系统的dev项中获取

如何使用vasc访问数据库

对于数据库的访问,vasc直接使用github.com/go-sql-driver/mysql 作为MySQL数据库访问驱动。golang的database标准库具有原生支持连接池的特性,并且能够防范SQL注入攻击。vasc的封装仅提供建立数据库连接的接口并约定数据操作的流程。具体的业务数据库访问实现由开发者进行。当开发者利用vasc搭建服务时,建议将数据访问接口独立开发,例如在工程中编写如下风格的源代码:

package vasctest

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "github.com/marxn/vasc"
)

type VascDBConn struct {
    DBHandle *sql.DB
}

func NewVascDBConn() (*VascDBConn, error) {
    dbConn, err := vasc.SetupDBConnection(dbEngine, dbUser, dbPasswd, dbHost, dbPort, dbName, dbCharset)
    if err!=nil {
        return nil, err
    }

    dbConn.SetMaxOpenConns(maxOpenConns)
    dbConn.SetMaxIdleConns(maxIdleConns)

    return &VascDBConn{DBHandle:dbConn}, nil
}

func (dbconn *MaraTrackSDKDBConn) testDB() {
    dbconn.DBHandle.Ping()
}

如何使用vasc记录日志

vasc提供以下接口用于记录日志:

func ErrorLog(format string, v ...interface{})
func InfoLog(format string, v ...interface{})
func WarnLog(format string, v ...interface{})
func DebugLog(format string, v ...interface{})

以上四个分别是debug、info、warning、error级别的日志对应的接口调用。vasc的日志是对syslog的封装,通过syslog服务写入文件系统。 例如:

ErrorLog("Module manager starting failed: %s", err.Error())

About

vasc is a development framework based on Go(golang). It support web routing, scheduling, scaling out for distributed systems.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages