以上的代码截图表示启动一个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. dotweb——go语言的一个微型web框架(一)

    dotweb是16年正式托管到github的一个开源项目,go语言的web框架目前也有很多,出名的有bee和echo.它们都是很优秀的框架,但是我们喜欢更轻.更小的东西,经历一些之后我们更青睐微服务这 ...

  2. dotweb——go语言的一个微型web框架(三)路由注册

    上一章我们讲了如何启动一个dotweb程序,本篇文章将介绍如何注册路由. router是dotweb用来管理路由的结构体,它提供了一些关于路由操作函数. app := dotweb.New() rou ...

  3. 【Flask】微型web框架flask大概介绍

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

  4. .NET的微型Web框架 Nancy

    .NET的微型Web框架 Nancy .NET的微型Web框架 Nancy   大部分微软平台的开发人员如果选择开发框架只能是在ASP.NET WEBFORM和ASP.NET MVC两个之间选择. 而 ...

  5. 笔记:学习go语言的网络基础库,并尝试搭一个简易Web框架

    在日常的 web 开发中,后端人员常基于现有的 web 框架进行开发.但单纯会用框架总感觉不太踏实,所以有空的时候还是看看这些框架是怎么实现的会比较好,万一要排查问题也快一些. 最近在学习 go 语言 ...

  6. 运行第一个Go Web框架

    GO 语言的web框架很多,相对来说, Beego 框架,入门简单,文档齐全(中文),功能强大,本文以Beego 示例. Beego提供了详细的开发文档:http://beego.me/docs/in ...

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

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

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

    Pyramid, Django, 和 Flask都是优秀的框架,为项目选择其中的哪一个都是伤脑筋的事.我们将会用三种框架实现相同功能的应用来更容易的对比三者.也可以直接跳到框架实战(Framework ...

  9. 使用 TypeScript,React,ANTLR 和 Monaco Editor 创建一个自定义 Web 编辑器(二)

    译文来源 欢迎阅读如何使用 TypeScript, React, ANTLR4, Monaco Editor 创建一个自定义 Web 编辑器系列的第二章节, 在这之前建议您阅读使用 TypeScrip ...

随机推荐

  1. struts2系列笔记(1)

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...

  2. runtime ---- iOS

    1.runtime是什么?runtime是一套底层的C语言的API(包括C语言数据类型,C语言函数) 实际上平时我们写的OC代码底层都是基于runtime,实际上也就是最后都转成了runtime代码 ...

  3. gridView 编辑单元格获取单元格焦点位置(位于单元格的焦点位置)

    1.主要代码: private void Form1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Col ...

  4. android学习4——View的长宽问题

    画形状的时间经常会用到点的坐标,这时原点O的位置就非常重要.在像素为1280*720的设备上画一条直线.代码如下所示: import android.app.Activity; import andr ...

  5. java 构造器学习笔记

    构造器(构造器不是方法也不是类的成员) 以前创建对象的方式, public class Constructor{ public static void main(String[] args){ per ...

  6. 浅谈PHP的CI框架(一)

    作为前端开发人员,掌握一门后端语言是必不可少的,PHP的CI框架是一个快速开发框架,基于MVC,比较接近原生PHP,在原有的PHP代码上封装了许多类,易上手,容易扩展,适用于小项目,并且CI的文档及案 ...

  7. 关于rem的使用和less编译工具考拉

    前提: 1.使用rem的前提是首先要设置好页面的根节点的大小: <script> (function(){ var html = document.documentElement; var ...

  8. SQL SERVER的检查点checkpoint

    1 什么是检查点 数据修改操作 都是在 内存中的数据页进行修改,每次修改后并没有立即把这些页面写入磁盘,而是等到一定时期,数据库引擎对数据库发起 检查点命令,这时,该命令就会创建一个已知的正常点,把当 ...

  9. js方法提纲

    Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...

  10. 第22篇 js中的this指针的用法

    前面把js的相关知识总结了下,今天把js中的上下文的this,对于强类型语言,this的用法非常的单一,因为他们没有js特有的动态绑定. 首先看下面代码: function funcA() { thi ...