以上的代码截图表示启动一个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. SQL Server-聚焦事务对本地变量、临时表、表变量影响以及日志文件存满时如何收缩(三十一)

    前言 接下来我们将SQL Server基础系列还剩下最后几节内容结束,后续再来讲解SQL Server性能调优,我们开始进入主题. SQL Server事务对本地变量影响 事务对变量影响具体是指什么意 ...

  2. ubuntu下包管理器apt-get常用命令

    apt-cache search package 搜索包 apt-cache show package 获取包的相关信息,如说明.大小.版本等 sudo apt-get install package ...

  3. 一个Python小白5个小时爬虫经历

    前言 最近业余在做一个基于.NET Core的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试.很巧的也是博客搜索,于是乎想到了博客园.C#也能做做页面数据抓取的,不过在博客园看到的大部分都 ...

  4. jQuery UI 实例 - 自动完成(Autocomplete)

    http://www.runoob.com/jqueryui/example-autocomplete.html 自定义数据并显示 您可以使用自定义数据格式,并通过简单地重载默认的聚焦和选择行为来显示 ...

  5. IOS编程学习笔记

    @interface -实例对象 +类名 #import "MyClass" @implementation MyClass -(id)initWithString:(NSStri ...

  6. Redis 安装与初体验

    一.Redis简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(s ...

  7. oracle commond

    常用commond alter user scott account unlock; --解锁账号 alter user scott identified by new_pwd; --设置密码 lsn ...

  8. Spring框架中 配置c3p0连接池 完成对数据库的访问

    开发准备: 1.导入jar包: ioc基本jar jdbcTemplate基本jar c3p0基本jar 别忘了mysql数据库驱动jar 原始程序代码:不使用配置文件方式(IOC)生成访问数据库对象 ...

  9. 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结

    Geoserver篇 注意: 1)用法 GeoServer-Extension的使用方法:将jar包直接放入部署在tomcat上的geoserver/WEB-INF/lib文件夹中 2)在安装插件时, ...

  10. Yii前台后台登录混淆问题

    我们在用yii开发项目时候,如果前后台使用modules实现 那么 做登录时候用户名就会出现前后台登录混淆的事情 于是可以在adminModule.php文件中做个设置 public function ...