Vagrant与skynet框架

         skynet是一个go语言的分布式服务框架,官方推荐用vagrant搭建开发环境,但官方文档并不详实,谈一下自己在配置这个框架的经验。

现在网络服务开发,很多人都希望在win下开发,而在linux下部署,所以我需要在win下使用vagrant的一台ubuntu机器,上面运行着skynet服务,而可以在window下连接访问。大概主要是三方面的问题,第一,vagrant配置的虚拟机与主机通信,就可以使宿/主机相互通信了;第二,doozerd服务不能被发现;第三,skynet服务回应了一个不可被连接的地址。

        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的服务器配置中加上这样一行

                                 config.ServiceAddr.IPAddress = “192.168.33.10”

就可以了。

service启动命令:

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

client启动命令:

                                    ./client –doozer=”192.168.33.10:8046”

为什么要这么穷折腾,因为官方文档说,skynet服务不能运行在win下。如果不想每次启动服务都这么复杂,就配置环境变量。

原文地址:https://www.cnblogs.com/BlankEye/p/3219799.html