文档章节

Go语言实现http共享(带客户访问trace)

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 00:48
字数 403
阅读 3
收藏 0

我之前有篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/03/13/httpShareGolang20120312.html)中提到过用Go语言实现http文件共享,这个版本的程序比python的实现快了点,默认情况下支持的客户端多了些,但是没有客户访问的trace,程序运行过程中,感觉像是死掉了。我想改进下,让它有trace

代码如下: 

/*
File : httpShareWithTrace.go
Author : Mike
E-Mail : Mike_Zhang@live.com
*/
package main
import(
    "fmt"
    "net/http"
    "io/ioutil"
    "log"
    "time"
    "os"
    "strings"
)
func getFilelist(path string) string {
        m_files,err := ioutil.ReadDir(path)
        if err !=nil{
        // println( "Get filelist error !" )
                return""
        }
        var strRet string
        for _,f := range m_files {
                // println(f.Name(),f.IsDir())
                if path == "./" {
                        strRet += "<p><a href=\""+path+""+f.Name() +" \">" + f.Name() + "</a></p>"
                }else{
                        strRet += "<p><a href=\""+path[1:]+"/"+f.Name() +" \">" + f.Name() + "</a></p>"
                }
        }
        return strRet
}
func Handler( w http.ResponseWriter,r *http.Request ){
        println("Request ",r.URL.Path," from ",r.RemoteAddr)
        // path := r.URL.Path[1:]
        path := "." + r.URL.Path
        if path == "./favicon.ico" {http.NotFound(w,r);return}
        if path == "./" || getFilelist(path) != "" {fmt.Fprintf( w,"%s",getFilelist(path));return}
        fin,err := os.Open(path)
        defer fin.Close()
        if err != nil {fmt.Fprintf( w,"404 : Not found" );return}
        readLen := 1024 * 1024
        buf := make([]byte,readLen)
        startPos := 0
        println("Transfer file ",path," ... ")
        for {
                n,err := fin.ReadAt(buf,int64(startPos))
                fmt.Fprintf(w,"%s",buf[:n])
                if 0 == n || err != nil {break}
                startPos += readLen
        }
}
func main(){
        port := "8080"//Default port 
        if len(os.Args)>1 { port = strings.Join(os.Args[1:2],"")}
        http.HandleFunc( "/",Handler)
        s := &http.Server{
                Addr: ":"+port,
                ReadTimeout: 1 * time.Hour,
                WriteTimeout: 1 * time.Hour,
                MaxHeaderBytes: (1 << 31) - 1 , //Max file size is 2048M
        }
        println("Listening on port ",port,"...")
        log.Fatal(s.ListenAndServe())
}

运行效果如下:

1、启动http文件共享

2web访问

3、后台trace

说明:最大支持2G文件的下载,限时为1个小时,这里没有用充分使用http协议,直接用文件io做的。时间有限,这里暂时达到了预期功能,够局域网使用,这个等以后有时间了做进一步的优化。

本文转载自:http://www.cnblogs.com/MikeZhang/archive/2012/08/06/httpShareGolang20120805.html

AllenOR灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
Leoncom » 分布式服务的Trace——Google Da

对于分布式在线服务,一个请求需要经过系统中多个模块,上百台机器的协作完成单次请求,典型场景就是Search Engine的一次用户检索,单靠人力无法掌握整个请求中各个阶段的性能开销,更无法快...

天天顺利
2015/05/15
1K
0
HTTP协议之告知服务器意图的HTTP方法

GET:获取资源 GET方法用来请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。 POST:传输实体主体 POST方法用来传输实体的主体。虽然用GET方法也可以传输实体的主体,但...

柳哥
2015/09/18
57
0
ios开发网络篇—HTTP协议 - 转

一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ,通过1个URL,能找到互联网唯一的1个资源 ,URL就是资源的地址,位置,互联网上的每个资源都有一个唯一的URL 2.U...

久依
2018/12/13
0
0
Twitter zipkin 分布式跟踪系统的设计与实现

概述 Twitter的zipkin是一个致力于收集Twitter所有的分布式服务的时间数据的分布式跟踪系统。它提供了收集数据,和查询数据两大服务。系统的理论模型来自于Google Dapper 论文。Dapper这篇论...

tqyin
2016/09/28
4.2K
2
Serverless无服务应用架构纵横谈

一、Serverless是啥 自从互联网兴起以来,Server就成了网络的核心部件。所以围绕Server的生意圈,也发展得如火如荼。 从最早的电信托管,到虚拟机,到现在的Serverless,形成了几大阵容: 1、...

2017/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部