Hacker News new | ask | show | jobs
by lma21 1252 days ago
for Go, do you rely on `net/http/fcgi` to run it? Do you have any example i can have a look at?
1 comments

> for Go, do you rely on `net/http/fcgi` to run it?

Yes.

> Do you have any example I can have a look at?

https://github.com/John-Nagle/vehiclelogserver/blob/master/v...

There's not much machinery required.

    package main
    import (
        "database/sql"
        "net/http"
        "net/http/fcgi"
    )

    //
    //  Called by FCGI for each request
    //
    func (sv FastCGIServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
        body := make([]byte, 5000) // buffer for body, which should not be too big
        if req.Body != nil {
            len, _ := req.Body.Read(body)          // body of HTTP request
            bodycontent := body[0:len]             // take correct part of buffer
            Handlerequest(sv, w, bodycontent, req) // handle request
        }
    }

    //  Run FCGI server
    func main() {
        sv := new(FastCGIServer)
        fcgi.Serve(nil, sv)
    }

    //  Handlerequest -- handle one request from a client
    func Handlerequest(sv FastCGIServer, w http.ResponseWriter, bodycontent []byte, 
        req *http.Request) {
        // GENERATE REPLY CONTENT HERE
        w.WriteHeader(statuscode)           // internal server error
        w.Write(content) // report error as text ***TEMP***
    }
That will run on low-end hosting at Dreamhost.

So there you are, in a modern language, with hard-compiled code with good performance, and reasonably good fault tolerance. Next step up would be a load balancer and redundant databases.