1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/devfeel-dotweb

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

DotWeb

Simple and easy go web micro framework

Важно: теперь нужна поддержка версии go1.9+ и поддержка go mod.

Документ: https://www.kancloud.cn/devfeel/dotweb/346608

Руководство: https://github.com/devfeel/dotweb/blob/master/docs/GUIDE.md

Gitter GoDoc Go Report Card Go Build Card Golang-Devfeel

1. Установка

go get github.com/devfeel/dotweb

2. Начало работы

package main

import (
    "fmt"
    "github.com/devfeel/dotweb"
)

func main() {
    //init DotApp
    app := dotweb.New()
    //set log path
    app.SetLogPath("/home/logs/wwwroot/")
    //set route
    app.HttpServer.GET("/index", func(ctx dotweb.Context) error{
        return ctx.WriteString("welcome to my first web!")
    })
    //begin server
    fmt.Println("dotweb.StartServer begin")
    err := app.StartServer(80)
    fmt.Println("dotweb.StartServer error => ", err)
}

Примеры: https://github.com/devfeel/dotweb-example

3. Функции

  • Поддержка go mod
  • Поддержка статических маршрутов, параметров маршрута, групповых маршрутов
  • Маршрутизация поддерживает файлы / каталоги, поддерживает настройку того, разрешать ли просмотр каталогов
  • Поддержка HttpModule, поддержка маршрутизации перед глобальным уровнем пользовательского кода
  • Поддержка промежуточного программного обеспечения, поддержка настройки на уровне приложения, группы, маршрутизатора — https://github.com/devfeel/middleware
  • Поддержка функций, можно привязать к HttpServer для глобального включения
  • Поддержка STRING/JSON/JSONP/HTML форматов вывода
  • Интеграция с Mock
  • Интегрированный Timeout Hook
  • Глобальная обработка ошибок HTTP
  • Глобальная обработка журналов
  • Поддержка Hijack и WebSocket
  • Встроенный кэш
  • Встроенная поддержка сеансов — поддержка автоматического переключения основного и резервного redis
  • Встроенная TLS поддержка
  • Поддержка подключения сторонних механизмов шаблонов (необходимо реализовать интерфейс dotweb.Renderer)
  • Модульная конфигурация
  • Собственная базовая статистика сбора данных, поддержка вывода данных статистики с интервалом в минуту

Пример конфигурации

4. Производительность

DotWeb  1.9.2  16core16G                      
cpu 内存 Samples Average Median 90%Line 95%Line 99%Line Min Max Error% Throughput Received KB/Sec Send KB/Sec
40% 39M 15228356 19 4 43 72 204 0 2070 0.00% 48703.47 7514.79 8656.28
40% 42M 15485189 18 4 41 63 230 0 3250 0.00% 49512.99 7639.7 8800.16
40% 44M 15700385 18 3 41 64 233 0 2083 0.00% 50203.32 7746.22 8922.86
                           
ECHO 1.9.2 16core16G                      
cpu 内存 Samples Average Median 90%Line 95%Line 99%Line Min Max Error% Throughput Received KB/Sec Send KB/Sec
38% 35M 15307586 19 4 44 76 181 0 1808 0.00% 48951.22 6166.71 9034.94
36% 35M 15239058 19 4 45 76 178 0 2003 0.00% 48734.26 6139.37 8994.9
37% 37M 15800585 18 3 41 66 229 0 2355 0.00% 50356.09 6343.68 9294.24
                           
Gin   1.9.2  16core16G                       
cpu 内存 Samples Average Median 90%Line 95%Line 99%Line Min Max Error% Throughput Received KB/Sec Send KB/Sec
36% 36M 15109143 19 6 44 71 175 0 3250 0.00% 48151.87 5877.91 8746.33
36% 40M 15255749 19 5 43 70 189 0 3079 0.00% 48762.53 5952.45 8857.25
36% 40M 15385401 18 4 42 66 227 0 2312 0.00% 49181.03 6003.54 8933.27

5. Маршрутизатор

1) Обычный маршрут

  • Поддерживает методы запроса GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE Поддержка HiJack\WebSocket\ServerFile трёх классов особых приложений:
  • Поддержка любого способа регистрации, по умолчанию совместима с GET\POST\HEAD\OPTIONS\PUT\PATCH\DELETE способами.
  • Поддержка добавления HEAD способа через конфигурацию.
  • Поддержка регистрации Handler для включения конфигурации.
  • Поддержка проверки соответствия запроса указанному маршруту.
1Router.GET(path string, handle HttpHandle)
2Router.POST(path string, handle HttpHandle)
3Router.HEAD(path string, handle HttpHandle)
4Router.OPTIONS(path string, handle HttpHandle)
5Router.PUT(path string, handle HttpHandle)
6Router.PATCH(path string, handle HttpHandle)
7Router.DELETE(path string, handle HttpHandle)
8Router.HiJack(path string, handle HttpHandle)
9Router.WebSocket(path string, handle HttpHandle)
10Router.Any(path string, handle HttpHandle)
11Router.RegisterRoute(routeMethod string, path string, handle HttpHandle)
12Router.RegisterHandler(name string, handler HttpHandle)
13Router.GetHandler(name string) (HttpHandle, bool)
14Router.MatchPath(ctx Context, routePath string) bool

Принимает два параметра: один — URI путь, другой — тип HttpHandle, устанавливает метод, который будет выполняться при совпадении с этим путём.

2) static router

Статический маршрутизатор использует синтаксис без параметров, pattern — это фиксированная строка.

package main

import (
    "github.com/devfeel/dotweb"
)

func main() {
    dotapp := dotweb.New()
    dotapp.HttpServer.GET("/hello", func(ctx dotweb.Context) error{
        return ctx.WriteString("hello world!")
    })
    dotapp.StartServer(80)
}

test: curl http://127.0.0.1/hello

3) parameter router

Маршрутизатор с параметрами использует двоеточие : после строки в качестве параметра имени, можно получить значение параметра маршрута через метод GetRouterName HttpContext.

package main

import (
    "github.com/devfeel/dotweb"
)

func main() {
    dotapp := dotweb.New()
    dotapp.HttpServer.GET("/hello/:name", func(ctx dotweb.Context) error{
        return ctx.WriteString("hello " + ctx.GetRouterName("name"))
    })
    dotapp.HttpServer.GET("/news/:category/:newsid", func(ctx dotweb.Context) error{
        category := ctx.GetRouterName("category")
        newsid := ctx.GetRouterName("newsid")
        return ctx.WriteString("news info: category=" + category + " newsid=" + newsid)
    })
    dotapp.StartServer(80)
}

test:
curl http://127.0.0.1/hello/devfeel
curl http://127.0.0.1/hello/category1/1

4) group router

    g := server.Group("/user")
    g.GET("/", Index)
    g.GET("/profile", Profile)

test:
curl http://127.0.0.1/user
curl http://127.0.0.1/user/profile

6. Binder

  • HttpContext.Bind(interface{})
  • Support data from json, xml, Form
type UserInfo struct {
        UserName string `form:"user"`
        Sex      int    `form:"sex"`
}

func TestBind(ctx dotweb.HttpContext) error{
        user := new(UserInfo)
        if err := ctx.Bind(user); err != nil {
             return ctx.WriteString("err => " + err.Error())
        }else{
             return ctx.WriteString("TestBind " + fmt.Sprint(user))
        }
}

7. Middleware

Middleware

func InitRoute(server *dotweb.HttpServer) { server.GET("/", Index) server.GET("/use", Index).Use(NewAccessFmtLog("Router-use"))

g := server.Group("/group").Use(NewAccessFmtLog("group"))
g.GET("/", Index)
g.GET("/use", Index).Use(NewAccessFmtLog("group-use"))

}

type AccessFmtLog struct { dotweb.BaseMiddlware Index string }

func (m *AccessFmtLog) Handle(ctx dotweb.Context) error { fmt.Println(time.Now(), "[AccessFmtLog ", m.Index, "] begin request -> ", ctx.Request.RequestURI) err := m.Next(ctx) fmt.Println(time.Now(), "[AccessFmtLog ", m.Index, "] finish request ", err, " -> ", ctx.Request.RequestURI) return err }

func NewAccessFmtLog(index string) *AccessFmtLog { return &AccessFmtLog{Index: index} }

8. Server Config

  • HttpServer:*

    • HttpServer.EnabledSession* — устанавливает, будет ли включена поддержка сессий. В настоящее время поддерживаются два режима: runtime и redis. По умолчанию поддержка отключена.

    • HttpServer.EnabledGzip* — устанавливает, будет ли включён Gzip. По умолчанию отключён.

    • HttpServer.EnabledListDir* — определяет, будет ли использоваться каталог для просмотра. Действует только для Router.ServerFile. Если включено, можно просматривать файлы в каталоге. По умолчанию выключено.

    • HttpServer.EnabledAutoHEAD* — включает или отключает автоматический HEAD-маршрут. Если включён, то все маршруты, кроме Websocket и HEAD, будут автоматически иметь HEAD-маршруты. В режиме разработки по умолчанию отключено.

    • HttpServer.EnabledAutoOPTIONS* — включает или отключает автоматический OPTIONS-маршрут. Если включён, все маршруты, кроме Websocket и HEAD, автоматически получат OPTIONS-маршруты. В режиме разработки по умолчанию отключено.

    • HttpServer.EnabledIgnoreFavicon* — позволяет игнорировать запросы на значок сайта. Обычно используется в интерфейсных проектах.

    • HttpServer.EnabledDetailRequestData* — включает подробную статистику запросов данных. По умолчанию false. Если включено, будет использоваться ServerStateInfo для сбора подробной статистики URL-адресов запросов.

    • HttpServer.EnabledTLS* — включает TLS-шифрование.

    • HttpServer.EnabledBindUseJsonTag* — включает использование json tag при выполнении Bind. По умолчанию отключено. Если включено, при выполнении Bind будет проверяться наличие json tag.

  • Run Mode*

Добавлены режимы разработки и производства. По умолчанию используется режим разработки. Для переключения между режимами используются функции DotWeb.SetDevelopmentMode и DotWeb.SetProductionMode.

В режиме разработки не обработанные исключения выводятся подробно, включается логирование, а также автоматически включаются AutoHead и AutoOptions. В будущем планируется расширить конфигурацию режимов работы.

9. Exception

500 error

По умолчанию при возникновении необработанного исключения выводится стандартная ошибка или подробная информация об исключении, возвращается 500 ошибок.

Пользовательская обработка исключений реализуется через функцию DotServer.SetExceptionHandle(handler *ExceptionHandle), где ExceptionHandle — это функция, которая принимает контекст и ошибку.

404 error

По умолчанию при 404 ошибке используется функция http.NotFound. Пользовательская обработка реализуется через DotWeb.SetNotFoundHandle(handler NotFoundHandle), где NotFoundHandle — функция, принимающая ответ и запрос.

Dependency

Для работы программы используются следующие зависимости:

— websocket — golang.org/x/net/websocket;

— redis — github.com/garyburd/redigo;

— yaml — gopkg.in/yaml.v2.

Все зависимости управляются go mod.

Связанные проекты

LongWeb — проект, который представляет собой шлюз для HTTP-соединений и предоставляет услуги Websocket и длинного опроса.

yulibaozi.com — блог, основанный на dotweb и mapper.

Golang-Blog-Server — ещё один блог на основе dotweb.

TokenServer — токен-сервер, предоставляющий услуги согласованности токенов и генерации глобальных идентификаторов.

Wechat-token — сервер управления токенами WeChat, предназначенный для централизованного управления access_tokens различных публичных аккаунтов и предоставления унифицированных интерфейсов для получения и автоматического обновления access_token.

dotweb-start — комплексный шаблон проекта на основе dotweb, dotlog, mapper, dottask, cache и database.

Контакты

QQ-Group: 193409346 — Golang-Devfeel.

Gitter: Devfeel/dotweb — Wechat.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это веб-фреймворк для разработки на языке Go, который предлагает множество практичных и элегантных функциональных компонентов, помогающих разработчикам более удобно создавать приложения. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/devfeel-dotweb.git
git@api.gitlife.ru:oschina-mirror/devfeel-dotweb.git
oschina-mirror
devfeel-dotweb
devfeel-dotweb
master