2013-01-05 4 views

Antwort

18

Sie haben Recht, dass Sie den ServeMux verwenden werden. Die godoc for ServeMux enthält einige detaillierte Informationen zur Verwendung.

Im Standard-HTTP-Paket gibt es den DefaultServeMux, der mit den Handle-Funktionen der obersten Ebene bearbeitet werden kann. Zum Beispiel kann eine einfache Anwendung virtuellen Host könnte wie folgt aussehen:

package main 

import (
    "fmt" 
    "net/http" 
) 

func main() { 
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprintf(w, "Hello, world!") 
    }) 
    http.HandleFunc("qa.example.com/", func(w http.ResponseWriter, r *http.Request) { 
     fmt.Fprintf(w, "Hello, improved world!") 
    }) 
    http.ListenAndServe(":8080", nil) 
} 

In diesem Beispiel werden alle Anfragen an qa.example.com den zweiten Handler treffen, und alle Anfragen an andere Hosts wird das erste Handler getroffen.

+1

Ich bin neugierig auf den zweiten Teil seiner Frage in Bezug auf die Anzahl der erforderlichen Binärdateien. Müssen Sie alle Ihre separaten virtuellen Host-Projekte in eine Binärdatei kompilieren, damit ServeMux korrekt multiplexen kann? Die einzige andere Methode, die ich mir vorstellen kann, ist, das os-Paket zu benutzen, um andere go-Binaries auszuführen, was einfach falsch scheint. –

+1

im Zusammenhang damit: Wie zwei Webserver in dem gleichen Go-Programm ausführen: http://stackoverflow.com/questions/21183183/running-two-web-server-at-the-same-time-in-one-go -Programm – Ali

+0

@MorganFreeman Um die Methode zu verwenden, die ich hier umrissen habe, werden Sie eine einzelne Go-Binärdatei ausführen, die auf einem einzelnen Host dient. Alle virtualisierten Hostnamen müssen auf den Host aufgelöst werden, auf dem Ihre Binärdatei ausgeführt wird. –

1

Hier ist ein weiteres Beispiel dafür, wie die "virtuellen Hosts" Funktionalität mit golang bieten:

https://gist.github.com/camoles/523dac8cc0fe40d52f66

In diesem Fall jeden "virtuellen Host" kann jeder HTTP-Server sein, wie andere golang net.http Webserver oder sogar andere konventionelle Webserver wie nginx. Jeder von ihnen kann entweder in derselben IP und in einem anderen Port oder in einer anderen IP und jedem Port sein. Es spielt keine Rolle, ob Sie auf einen anderen physikalischen Server weiterleiten, wenn Sie dies wünschen.

Verwandte Themen