[UMU 学 golang](5) HTTP Echo Server

UMU · · 2770 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  做加速时经常需要用到 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 学 golang](5) HTTP Echo Server

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2770 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传