在我的Rust应用程序中,我像这样启动Iron:

let host: &str = &format!("localhost:{}", port);
info!("Server running at http://{}", host);
Iron::new(Chain::new(router)).http(host).expect("Could not start Iron server");

它响应:

INFO Server running at http://localhost:3000

我可以 curl 它:

$ curl "http://localhost:3000/v1/foo"
{"bar":"baz"}

但是,在Scala中,我无法连接:

$ scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_40).
Type in expressions for evaluation. Or try :help.

scala> scala.io.Source.fromURL("http://localhost:3000/v1/foo").mkString
java.net.ConnectException: Connection refused
  at java.net.PlainSocketImpl.socketConnect(Native Method)

spray-client也无法连接:

spray.can.Http$ConnectionAttemptFailedException: Connection attempt to 127.0.0.1:3000 failed

这两种尝试均来自同一IP,并且localhost是正确的。 Iron服务器在失败的连接请求上不记录任何内容。

客户端和服务器中localhost127.0.0.1的不同组合不能解决问题。我误诊了。在Rust客户端中使用127.0.0.1确实可以解决该问题。

休息一会后,代码开始工作。我不记得我是否重新启动了Iron。然后,我针对它进行了数小时的开发。在某个阶段,它再次停止工作。重新启动JVM和/或Iron服务器无法解决该问题。

这不是我的Rust应用程序特有的;

我可以使用示例hello world Iron应用程序来重新创建问题。

$ git clone https://github.com/iron/iron.git
$ (cd iron && cargo run --example hello)

接着

$ curl "http://localhost:3000/"
Hello world!



$ scala
scala> scala.io.Source.fromURL("http://localhost:3000/").mkString
java.net.ConnectException: Connection refused
  • OSX 10.11.6
  • cargo 0.13.0每晚(9399229 2016-09-14)
  • 还按每晚0.13.0的标准对 cargo 进行了测试(19cfb67 2016-09-28)
  • 最佳答案

    根据this comment on this bug report的说法,“当其他服务使用IPv4时,Iron会默认将('localhost')解析为IPv6”。

    未解决该错误时,将Iron绑定(bind)到127.0.0.1

    关于scala - Curl可以连接到本地主机上的Iron服务器,但是Scala间歇性地无法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39781623/

    10-09 20:48