Golang:服务http和;从Go web应用程序到Goji的https?
这是一个单一Go web应用(使用Goji)处理http和https流量的正确方法吗Golang:服务http和;从Go web应用程序到Goji的https?,https,go,goji,Https,Go,Goji,这是一个单一Go web应用(使用Goji)处理http和https流量的正确方法吗 package main import ( "fmt" "net/http" "github.com/zenazn/goji/graceful" "github.com/zenazn/goji/web" ) func main() { r := web.New() //https://127.0.0.1:8000/r r.Get("/r", func(
package main
import (
"fmt"
"net/http"
"github.com/zenazn/goji/graceful"
"github.com/zenazn/goji/web"
)
func main() {
r := web.New()
//https://127.0.0.1:8000/r
r.Get("/r", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", "r")
})
go graceful.ListenAndServeTLS(":8000", "cert.pem", "key.pem", r)
r1 := web.New()
// http://127.0.0.1:8001/r1
r1.Get("/r1", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", "r1")
})
graceful.ListenAndServe(":8001", r1)
}
或者,让单一Go web应用程序同时收听端口8000和8001的最佳方法是什么?您不需要创建新对象,只需将
r
传递到优雅的ListendServe(“:8001”,r)
,当然,除非您根据https执行不同的操作。在我的例子中,SSL证书在某些路径上有效,而在某些路径上无效。所以我该怎么办?你现在做的很好。您可以在某处定义常用函数,并将它们添加到r
和r1
中。好的,谢谢,我刚刚开始使用Go。将第一个作为goroutine而将第二个作为goroutine是否正确?是的,因为否则它将阻塞,您可能需要执行runtime.GOMAXPROCS(runtime.numpu())
以使用所有处理器内核来处理请求。感谢您的帮助!或者,您可以使用nginx终止HTTP和HTTPS(TLS)连接,将它们反向代理到侦听(例如)端口8000的单个Go服务器。这里有一个您可以利用的示例: