以上的代码截图表示启动一个dotweb服务,在浏览器里输入127.0.0.1:8080,将会得到一个“index”的页面。

app := dotweb.New()

dotweb.New()函数表示创建一个新的dotweb对象,这个对象是dotwebapp。我们把dotweb称之为web框架,实际上这只是一种叫法。dotweb它是一个application,如果您说它是个web服务器那么这种说法也是对的。dotweb.New()返回的dotweb对象通常我们叫做app,它负责日志、缓存、热加载、加载httpserver等等工作。它是一个容器、一个宿主,httpserver就是在它的环境里运行。

app.SetLogPath(file.GetCurrentDirectory())

dotweb内部实现了日志输出,你只需要制定一个日志路径就可以使用。这里只是指定了日志存放路径,至于如何输出日志这在后续的文章中会说明,请放心它的使用非常简单。

app.SetCache(cache.NewRuntimeCache())//使用本地内存当作缓存
app.SetCache(cache.NewRedisCache("redis标准连接字符串"))//使用redis作为缓存

dotweb对缓存有两种支持,一种是本地内存,一种是redis。在New()的时候,dotweb默认是不创建缓存对象的,如果你需要可以自己用SetCache()函数设置。在两种缓存策略中,你只能选择一种来使用。如果你设置了两种,dotweb将使用最后一个SetCache()。你可能对dotweb原生支持redis缓存表示欣喜,在你深入了解后会发现dotweb不只是cache支持redis。这正是出于对现代系统需要分布式部署的考虑。

app.Cache()

你可以通过Cache()函数获取缓存对象,在后续文章中我会介绍操作Cache对象的方法,如果你已经迫不及待想使用它,你可以阅读源码,它非常简单很容易就可以理解。

app.RegisterModule(&dotweb.HttpModule{OnBeginRequest: func(ctx *dotweb.HttpContext) {fmt.Println(ctx.Url())},
OnEndRequest: func(ctx*dotweb.HttpContext) {fmt.Println("离开",ctx.Url(),"页面")},})
app.RegisterModule(&dotweb.HttpModule{OnBeginRequest: func(ctx *dotweb.HttpContext) {if strings.Split(ctx.Url(),"/")[1] == "subject"{fmt.Println(ctx.Session().Get("user"))if ctx.Session().Get("user") == nil {ctx.WriteString("请先登录.")ctx.End()}}},
OnEndRequest: func(ctx*dotweb.HttpContext) {},})

Module在dotweb中被称为中间件,RegisterModule函数接受一个HttpModule类型的参数,HttpModule有两个参数为*dotweb.HttpContext函数定义—OnBeginRequest和OnEndRequest,它们分别表示在UserHandler执行前执行和在UserHandler执行后执行。dotweb接受多个Module,它会按照注册顺序来执行,在一些权限验证和日志处理中它非常有用。上述代码第一个Module打印了请求的路由,第二个Module表示在subject的子路由下需要用户登录。有人表示希望能把Module绑定到UserHandler上以方便开发,这条建议我们认为很有用,我们会在以后的版本中增强Module的功能。

app.SetEnabledListDir(true)

SetEnabledListDir用来设置是否允许目录浏览,默认是false。如果你的服务器上没有任何静态资源给客户端访问,那么就可以不用配置。关闭目录浏览通常在数据接口服务器上非常有用。

app.SetEnabledDebug(true)

SetEnabledDebug用来设置是否启动调试模式,在调试模式下如果出现异常dotweb将返回相关的错误信息,方便追查问题。这在开发和测试环境中非常有用,默认值是false,所以在生产环境中你可以不用配置该值。

app.SetEnabledSession(true)

SetEnavledSession用来设置是否启用session,你可能会感到疑惑为什么dotweb默认不启用session呢?因为维持session会带来性能损耗,在某些项目中不需要session,如果启用可能会带来不必要的性能损失。如果你需要你只需设置一下就好,就像示例一样让它为true。

app.SetSessionConfig(session.NewDefaultRuntimeConfig())//使用本地内存
app.SetSessionConfig(session.NewDefaultRedisConfig("redis标准连接字符串"))//使用redis

dotweb的session也是有两种存储策略,一种是本地的内存,一种是redis。这点和缓存

app.SetEnabledGzip(true)

SetEnabledGzip用来设置是否启用Gzip压缩,当然默认还是false。事实上Gzip不一定会带来性能的提升,因为对Response的缓冲区进行压缩会造成一些性能损耗,所以对于是否启用Gzip压缩你需要考虑到项目的实际情况。

app.SetExceptionHandle(func(ctx *dotweb.HttpContext,errinfo interface{}){//ctx表示请求上下文,errinfo表示错误信息fmt.Println(ctx.Url(),"请求出现异常,错误信息:",errinfo)})

虽然dotweb提供了默认的异常处理模块,但是大部分情况下它不是你想要的那种方式。所以你可以根据自己的需要添加自己的异常处理模块,如果你添加了自己的异常处理模块,那么默认异常处理模块将会失效。

app.StartPProfServer(8081)

PProf服务是用来监控dotweb运行状态的,它目前提供了一些简单的查询。不过我们有计划在今后版本增强这部分功能,我们欢迎大家的建议。需要注意的是PProf服务端口不能和dotweb主服务端口冲突。

最重要的一步:

app.StartServer(8080)

StartServer表示启动dotweb服务,它会根据配置初始化相关资源并且装载httpserver。启动之后,你就可以在浏览器里访问了。

当然dotweb也有读取配置文件启动的方法,在一些场景下它非常有用,我会在后续的文章中介绍如何使用配置文件启动dotweb。当然,如果你已经迫不及待也可以去阅读源码,项目地址:https://github.com/devfeel/dotweb,再次声明:我们欢迎你对提出建议或者直接进行源码贡献,你可以通过github项目地址找到我们的QQ群。

dotweb——go语言的一个微型web框架(二)启动dotweb相关推荐

  1. python微型web框架flask介绍

    Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持包比如Jin ...

  2. Python微型Web框架Bottle源码分析

    Bottle 是一个快速,简单和轻量级的 WSGI 微型 Web 框架的 Python.它作为单个文件模块分发,除了 Python 标准库之外没有依赖关系. 选择源码分析的版本是 Release 于 ...

  3. [Link]选择一个 Python Web 框架:Django vs Flask vs Pyramid

    选择一个 Python Web 框架:Django vs Flask vs Pyramid

  4. 后端选型中不同语言及对应的Web框架

    在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜 ...

  5. 探讨后端选型中不同语言及对应的Web框架

    在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜 ...

  6. 从零开始写javaweb框架 pdf_大学写的一个 Java Web 框架

    简介 today-web是一个基于Servlet的高性能轻量级Web框架. 安装 <dependency><groupId>cn.taketoday</groupId&g ...

  7. 请您用C语言实现一个ahci驱动框架

    好的,以下是一个简单的AHCI驱动框架的C语言实现: ``` #include <stdint.h> // AHCI控制器端口地址定义 #define AHCI_BASE 0x400000 ...

  8. 【微型Web框架(Ruby) Sinatra】

    Sinatra:一个优雅地包装了Web开发的DSL Sinatra程序的三个基本组成部分: 路由(route): '/' 就是路由.路由可以是单一的路径,或者带有参数的路径(比如 /:name),甚至 ...

  9. PHP开源 | ysKit(ys工具包) - 微型Web框架

    ysKit(ys工具包) 一款 php 微型框架:极轻极简,支持MIT协议. 相关链接:源码@gitee # 演示@txjia # 文档@txjia 极轻极简 核心库:< 120K : (均指压 ...

最新文章

  1. python【力扣LeetCode算法题库】5- 最长回文子串
  2. 生成树协议实验报告_STP生成树协议
  3. gson格式化参数 对象转Map
  4. StarUML使用说明-指导手册
  5. FreeSWITCH 下载地址
  6. request.setAttribute()用法
  7. unity中链接字符串和变量显示_unity3d根据字符串读取属性.
  8. C Primer Plus 第七章 第七题
  9. ios音乐播放器demo
  10. 对话Ruby创始人松本行弘、阿里高级技术专家朴灵!
  11. vue引入SuperMap超图 引入流程及报错处理
  12. 无法修改计算机睡眠,win7不能睡眠怎么办,通过两个步骤的设置轻松解决
  13. 历史要横着读,故事要竖着看!嘻哈~
  14. css3技巧——产品列表之鼠标滑过效果translateY(三)
  15. aix 到 linux的网络,通过VIOS实现AIX系统的网络虚拟化
  16. OpenGL 实验一 绘制简单图形
  17. KinectFusion原理介绍
  18. r34300u和r53500u 哪个好
  19. 二叉树的中序遍历 递归与非递归
  20. List的removeAll方法异常

热门文章

  1. linux 内核探测kprobe 初步了解
  2. 图解Windows域的命令行操作
  3. 图解VC++开发ActiveX控件C#调用
  4. 图解TC++3.0开发教程
  5. Docker核心技术 1
  6. 【LNOI2014】【BZOJ3626】NOIp2018模拟(三) LCA
  7. [jquery]if条件句
  8. Myeclipse中js文件中的乱码处理
  9. DbHelperSQL 判断数据库表结构公用方法
  10. javascript定时器及Date对象