package http_api

import (
    "fmt"
    "log"
    "net"
    "net/http"
    "strings"

    "github.com/nsqio/nsq/internal/app"
)

type logWriter struct {
    app.Logger
}

func (l logWriter) Write(p []byte) (int, error) {
    l.Logger.Output(2, string(p))
    return len(p), nil
}

func Serve(listener net.Listener, handler http.Handler, proto string, l app.Logger) {
    l.Output(2, fmt.Sprintf("%s: listening on %s", proto, listener.Addr()))

    server := &http.Server{
        Handler:  handler,
        ErrorLog: log.New(logWriter{l}, "", 0),
    }
    err := server.Serve(listener)
    // theres no direct way to detect this error because it is not exposed
    if err != nil && !strings.Contains(err.Error(), "use of closed network connection") {
        l.Output(2, fmt.Sprintf("ERROR: http.Serve() - %s", err))
    }

    l.Output(2, fmt.Sprintf("%s: closing %s", proto, listener.Addr()))
}

http_server.go的更多相关文章

  1. go语言nsq源码解读八 http.go、http_server.go

    这篇讲另两个文件http.go.http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go.tcp_server.go里的两个文件是相对应的.那两个文件用于处理tcp请求, ...

  2. Netty实现简易http_server

    Netty可以通过一些handler实现简单的http服务器.具体有三个类,分别是HttpServer.java.ServerHandlerInit.java.BusiHandler.java. 具体 ...

  3. swoole http_server 多进程并使用多进程处理消息

    <?php $http = new swoole_http_server("0.0.0.0", 9511); $http->set([ 'worker_num' =&g ...

  4. http_server实例代码

    from socket import * def handleClient(connfd): print("-----") request = connfd.recv(4096) ...

  5. swoole中http_server的配置与使用

    swoole中为我们提供了一个swoole_http_server类,方便我们处理http请求. 但是它对http协议的支持并不完整,所以一般建议在前面加一层nginx进行代理,对于php文件的处理交 ...

  6. 使用tornado,我们可以做什么?

    以下介绍都是建立在python2.x的基础上面,tornado使用任意版本皆可. 如果我们需要对外提供一个http server(web api)/websocket server时,我们都可以使用t ...

  7. tornado session

    [转]tornado入门 - session cookie 和session 的区别: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以 ...

  8. xss之渗透测试

    跨站脚本攻击:cross site script execution(通常简写为xss,因css与层叠样式表同名,故改为xss),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用 ...

  9. 利用Simple-RTMP-Server(SRS)来进行直播

    1.下载SRS 官方地址:http://www.ossrs.net/srs.release/releases/ 百度地址:http://pan.baidu.com/s/1kV8WQpx 2.编译安装S ...

随机推荐

  1. Centos下安装mysql 和挂载硬盘

    一,CentOS下安装Mysql 6.5 1.检测系统是否自带安装mysql # yum list installed | grep mysql 2.删除已经安装的Mysql # yum -y rem ...

  2. Nginx + IIS实现负载均衡 Session多站点共享

    日子过得太索然无味了,研究了一下,所谓的负载均衡(主要是windows服务器IIS下的).先看看分析图:环境:linux服务器: centos 6.3windows服务器: windows serve ...

  3. sso系统使用

    一:什么是sso(single sign on) ? sso(单点登录系统)简单说就是客户端第一次访问应用1的时候,由于没有登录,会被引导到登录页面进行登录,如果登录校验通过,将返回一个认证信息tic ...

  4. Demo2

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  5. mybatis自我总结

    mybatis是一款优秀的持久层框架,它避免了JDBC代码.将SQL语句放在Java中以及结果集的处理.利于后期的维护.它将SQL语句放到XML文件中. mybatis有sqlsessionfacto ...

  6. [转]在Windows下编译ffmpeg完全手册

    本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注 ...

  7. Python 爬取美团酒店信息

    事由:近期和朋友聊天,聊到黄山酒店事情,需要了解一下黄山的酒店情况,然后就想着用python 爬一些数据出来,做个参考 主要思路:通过查找,基本思路清晰,目标明确,仅仅爬取美团莫一地区的酒店信息,不过 ...

  8. Spring Security简明实践及相关国际化处理

    别人的都是最佳实践,因为我目前的设置没有按照参考文档推荐,还是采用DelegatingFilterProxy,所以我只能说简明实践.先贴我的applicationContext-security.xm ...

  9. SDCC2013大会笔记整理

    2013-8-30 大会首日 百度移动云三大框架:Clouda.SiteApp.Appbuilder MBaaS解决高性能Server很难构建的问题. 百度开放云的区域运营服务于创业者 ------- ...

  10. git 使用简易指南