[UMU 学 golang](5) HTTP Echo Server

前端之家收集整理的这篇文章主要介绍了[UMU 学 golang](5) HTTP Echo Server前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "net/http"
  6. "os"
  7. "time"
  8. )
  9.  
  10. func main() {
  11. var addr string
  12. if len(os.Args) > 1 {
  13. addr = ":" + os.Args[1]
  14. } else {
  15. addr = ":80"
  16. }
  17. server := http.Server{
  18. Addr: addr,Handler: &MyHandler{},ReadTimeout: 5 * time.Second,}
  19. err := server.ListenAndServe()
  20. fmt.Println(err)
  21. }
  22.  
  23. type MyHandler struct{}
  24.  
  25. func (*MyHandler) ServeHTTP(w http.ResponseWriter,r *http.Request) {
  26. info := r.RemoteAddr + " @ " + time.Now().String() + "\r\n" +
  27. r.Method + " " + r.RequestURI + "\r\n" +
  28. "Host: " + r.Host + "\r\n" +
  29. "UserAgent: " + r.UserAgent() + "\r\n"
  30. w.Write([]byte(info))
  31. fmt.Println(info)
  32. }

猜你在找的Go相关文章