Vagrant與skynet框架

         skynet是一個go語言的分佈式服務框架,官方推薦用vagrant搭建開發環境,但官方文檔並不詳實,談一下本身在配置這個框架的經驗。linux

如今網絡服務開發,不少人都但願在win下開發,而在linux下部署,因此我須要在win下使用vagrant的一臺ubuntu機器,上面運行着skynet服務,而能夠在window下鏈接訪問。大概主要是三方面的問題,第一,vagrant配置的虛擬機與主機通訊,就可使宿/主機相互通訊了;第二,doozerd服務不能被發現;第三,skynet服務迴應了一個不可被鏈接的地址。ubuntu

        vagrant主機與虛擬機通訊,可使用private network這樣能夠給虛擬機分配一個靜態ip,這樣就能相互通訊。而doozerd服務不能發現是,由於doozer官方文檔太簡單,致使誤解,官方啓動命令是這樣的「doozerd –w 「:8080」」,這個8080並非doozerd監聽的一個端口,真正監聽的端口是127.0.0.1:8046,這種環境下,window下的客戶端,固然發現不了doozer, 能夠用下面這個命令啓動doozer:服務器

                                  doozerd –l=」192.168.33.10:8046」 -w=」:8080」網絡

       以skynet/example下的client與service來講明第三個問題,win下clinet不能鏈接虛擬機的service。當解決前兩個問題以後 ,按理說就能夠進行開發了,但實踐中卻發現沒法鏈接服務,報錯以下:框架

&{192.168.33.10:8046 127.0.0.1:8046 true}
here
TestServiceClient: 2013/07/27 16:23:58 trace: Created client '&{DoozerConn:0xf84
0076770 Config:0xf84007dcc0 Log:0xf84008c4e8 servicePools:map[] instanceMonitor:
<nil>}'
TestServiceClient: 2013/07/27 16:23:58 trace: skynet.DoozerConnected: Connected
to doozer at 192.168.33.10:8046
here
TestServiceClient: 2013/07/27 16:23:58 debug: DoozerDiscovered: Discovered new d
oozer RMRP4S2D47JH533F at 192.168.33.10:8046
TestServiceClient: 2013/07/27 16:23:58 debug: skynet.ServiceDiscovered: Discover
ed service "TestService" at 127.0.0.1:9006
TestServiceClient: 2013/07/27 16:23:59 error: client.FailedConnection: Failed to
connect to service: 127.0.0.1:9006
Service request timed out分佈式

最核心的報錯是「connect sto  service: 127.0.0.1:90006」,能夠理解爲win下客戶端發起鏈接,而skynet也找到了服務,可是服務迴應給客戶端一個不能鏈接的地址,本地固然沒有這個服務,該服務在192.168.33.10上。實際上是由於一個服務迴應給客戶端的鏈接地址是寫死的,service.go的服務器配置中加上這樣一行vagrant

                                 config.ServiceAddr.IPAddress = 「192.168.33.10」debug

就能夠了。ip

service啓動命令:開發

                                  ./service –doozer=」192.168.33.10:8046」 –doozerboot=」192.168.33.10:8046」

client啓動命令:

                                    ./client –doozer=」192.168.33.10:8046」

爲何要這麼窮折騰,由於官方文檔說,skynet服務不能運行在win下。若是不想每次啓動服務都這麼複雜,就配置環境變量。

相關文章
相關標籤/搜索