Skip to content

araddon/m2go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

m2go, a Mongrel2 http server for go.

Includes adapter to run Pat.go

Usage

Example App:

import (
        "github.com/araddon/m2go"
        "github.com/bmizerany/pat"
        "io"
        "log"
        "net/http"
)

func main() {
        log.SetFlags(log.Ltime | log.Lshortfile)
        m := pat.New()
        m.Get("/hello/:name", http.HandlerFunc(hello))
        m.Get("/stream", http.HandlerFunc(stream))
        m2go.ListenAndServe("tcp://127.0.0.1:9055|tcp://127.0.0.1:9056|d9eae9a0-6bad-11e1-9cc3-5254004a61b5", m)
}

func hello(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Query().Get(":name")
        io.WriteString(w, "Hello, "+name)
}

// this will serve as a Streaming API, continuing to push out updates
// to connected client
func stream(w http.ResponseWriter, r *http.Request) {
        // this line:  is the key to make it streaming.
        r.Header.Set("Transfer-Encoding", "chunked")
        r.Header.Set("Content-Type", "application/json")
        io.WriteString(w, "some content")

        // lets simulate a zeromq type connection that recieves messages periocically
        //  and pushes to client
        timer := time.NewTicker(time.Second * 1)

        go func() {
                for _ = range timer.C {
                        io.WriteString(w, `{"msg":"still alive","status":200}`)
                }
        }()
}

About

Mongrel2 Handler for Go

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages