以上的代码截图表示启动一个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. Linux编程之ICMP洪水攻击

    我的上一篇文章<Linux编程之PING的实现>里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?这里我将介绍ICMP另一个很有 ...

  2. Oracle instant client在windows下的安装和使用

    安装 * 从oracle官方网站下载instant client文件,一般来说,有basic.sqlplus.odbc.jdbc,就足够用的了: instantclient-basic-win32-1 ...

  3. Ajax异步获取html数据中包含js方法无效的解决方法

    页面上使用js写了一个获取后台数据的方法 function data() { var tab = $("#dic") $.ajax({ url: '../demo.ashx?met ...

  4. [Hadoop] - SSH免密码登录

    在安装hadoop之前需要进行ssh免密码登录,ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以Redhat为例. 我这里只采用一台机器A(10. ...

  5. jQuery源码学习:Deferred Object

    本文所有讨论均基于jQuery版本3.1.1,官网http://jquery.com/. 一.Deferred Object 1. 简介和创建 详见API:http://api.jquery.com/ ...

  6. 2017-2-24 C#基础 for循环的嵌套

    用几个练习题演示一下for循环的嵌套 1.打印以下图形 ★★★★★★★★★★★★★★★ namespace _2017_2_24_for循环的嵌套 { class Program { static v ...

  7. 第20篇 js高级知识---深入原型链

    前面把js作用域和词法分析都说了下,今天把原型链说下,写这个文章费了点时间,因为这个东西有点抽象,想用语言表达出来不是很容易,我想写的文章不是简单的是官方的API的copy,而是对自己的知识探索和总结 ...

  8. Yii地址美化(nginx环境)

    通过urlmanager实现yii地址美化,需配合服务器中的rewrite配置     1.在'components'中加入    'urlManager'=>array(        'ur ...

  9. MySQL创建数据库与创建用户以及授权

    1.create schema [数据库名称] default character set utf8 collate utf8_general_ci;--创建数据库 采用create schema和c ...

  10. Oralce Plsql 中文显示乱码问题无需修改注册表完美解决

    此方法在其它版系统也可以解决 win10-64 plsql oracle 11g绿色版客户端 错误现象: 因为oracle用的是绿色版,无法设置注册表,尝试以下方法. 解决方法: 1.在plsql中查 ...