2016-03-09 24 views
1

內寫在谷歌轉到服務兩個網站我有一個從數字海洋虛擬機。它目前有兩個鏈接到虛擬機的域。 我不使用任何其他web服務器,但Golang的內置http模塊。在性能方面,我喜歡它,我覺得我可以完全控制它。單個VM

目前我使用的是內置了多個網站單一的圍棋程序。

http.HandleFunc("test.com/", serveTest) 
http.HandleFunc("123.com/", serve123) 
http.HandleFunc("/", serve123) 

由於他們的網站,圍棋程序正在使用端口80爲。 而問題是,當我試圖只更新1的網站,我有他們都寫在相同的代碼重新編譯整個事情。

1)有沒有辦法讓它只能用Golang(不帶Nginx或Apache)熱插拔 2)什麼是標準最佳實踐?

太謝謝你了!

+3

如果它們是相同的程序,那麼你必須重新編譯的變化。另一種方法是使用nginx的反向代理,以代理多個Go程序(每處理一個網站/服務)或類似的球童(https://caddyserver.com/)來實現相同的。 – elithrar

回答

1

好了,你可以去做熱交換進行,但我真的不想這樣做,除非真的ncecessary因爲複雜化是不可忽略的(我不是在談論代碼)。

你可以有一些親近的一種代理會坐在程序前,做一個優雅的交換時,您的二元變化:其原理是有一個端口,另一個代理上的二進制文件。當一個新的二進制文件準備就緒時,您可以在另一個端口上運行它,並將代理重定向到新端口,然後正常關閉舊端口。

有沉迷於一個工具,我不記得的名字......

編輯:不是我的初衷,但千鈞一髮https://github.com/rcrowley/goagain

的personnal建議 :爲此使用反向代理,它更簡單。我個人的設置是使用h2o終止SSL,HTTP2等,並將請求發送到運行在後臺的各種網站。不僅去的,雖然,但也PHP的,一個Gitlab實例等,其更加靈活,並且代理的性能損失很小...

+1

謝謝Elwinar和@Elithrar。 「反向代理」是我需要學習的功能。 (我不知道那種存在,因爲我不是一個專業的軟件開發人員,但沒有對任何CS正規教育的一個業餘愛好者)我已經找到許多圖書館,除了什麼你們所提及。這對我來說是足夠的:)再次感謝你們兩位!祝你有個好的一天。 – Gon