文档章节

[UMU 学 golang](5) HTTP Echo Server

UMU
 UMU
发布于 2015/10/16 15:19
字数 184
阅读 95
收藏 0

  做加速时经常需要用到 HTTP Echo Server 来测试加速有没有成功,如果成功了,是显示请求来自加速代理服务器。原来用 node.js 写了一个,代码如下:

var http = require('http');
http.createServer(
    function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || req.socket.remoteAddress || req.connection.socket.remoteAddress;
        var ua = req.headers['user-agent'];
        res.end(ip + '\n' + ua);
    }
).listen(80);
console.log('Server is running...');

  现在改为 golang,并稍微改进了一下:

package main

import (
	"fmt"
	"net/http"
	"os"
	"time"
)

func main() {
	var addr string
	if len(os.Args) > 1 {
		addr = ":" + os.Args[1]
	} else {
		addr = ":80"
	}
	server := http.Server{
		Addr:        addr,
		Handler:     &MyHandler{},
		ReadTimeout: 5 * time.Second,
	}
	err := server.ListenAndServe()
	fmt.Println(err)
}

type MyHandler struct{}

func (*MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	info := r.RemoteAddr + " @ " + time.Now().String() + "\r\n" +
		r.Method + " " + r.RequestURI + "\r\n" +
		"Host: " + r.Host + "\r\n" +
		"UserAgent: " + r.UserAgent() + "\r\n"
	w.Write([]byte(info))
	fmt.Println(info)
}


© 著作权归作者所有

共有 人打赏支持
UMU

UMU

粉丝 118
博文 112
码字总数 44043
作品 0
厦门
程序员
私信 提问
[UMU 学 golang](3) TCP Echo Server

  测试需要,以前用 C + libevent 写了一个 TCP Echo Server,返回服务器时间、客户端地址信息和客户端发送的原内容。为了水一篇,现在改为 golang 实现。 package main import ("fmt""io"...

UMU
2015/09/22
77
0
[UMU WSH 教程终结篇](48) FSO 应用实例 - 批量重命名 WP 视频

UMU WSH Git:http://git.oschina.net/umu618/umu-wsh/ 本篇为 UMU WSH 教程终结篇,以后更倾向使用 Windows PowerShell 和 golang 来编写工具。 早期 WP 拍摄的视频,命名格式为 WPYYYYMMDD...

UMU
2016/02/02
100
0
[UMU 学 golang](1) Hello code!

  一直玩 WSH,被说逼格跟不上时代,又据说 go 即将发布的 1.5 版解决了 GC stop-the-world 问题了,所以 UMU 打算以后用它来开发工具。   最近想统计代码行数,以前用 VBS 写的一时间居...

UMU
2015/08/19
0
1
[UMU 学 golang](4) 简单的 AWS S3 客户端

  公司搞了一套兼容 Amazon S3 的云存储系统,用 C++ 写客户端很蛋疼,UMU 决定还是用 go 来写一个。   首先找到一个靠谱的开源项目,运行以下命令安装: go get github.com/mitchellh/...

UMU
2015/09/24
394
3
Codis 分布式缓存部署

环境介绍: 1:机器三台 ,IP/hostname 如下, hostname的设置很重要zookeeper / codis的通信都会用到,所以要配置好三台机器的hosts文件. 10.221.8.220 机器的hostname为 Redis1 10.221.8.221 机...

求学ing
2015/09/13
131
0

没有更多内容

加载失败,请刷新页面

加载更多

降压变换器 Buck

特点 输入输出极性相同。 工作过程 在 MOS 导通时,输入电源通过 L 和 C 滤波后向负载端提供电流;当 MOS 断开后,L 通过二极管续流,保持负载电流连续。输出电压因为占空比的作用,不会超过...

colinux
今天
2
0
Apache日志不记录访问静态文件,访问日志切割,静态元素过期时间设置

Apache配置不记录访问静态文件的日志 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录 vhost原始配置 <VirtualHost *:80> ServerAdmin test@163.com DocumentRoo...

野雪球
今天
3
0
聊聊storm的ICommitterTridentSpout

序 本文主要研究一下storm的ICommitterTridentSpout ICommitterTridentSpout storm-core-1.2.2-sources.jar!/org/apache/storm/trident/spout/ICommitterTridentSpout.java public interface......

go4it
今天
4
0
Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
4
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部