1

在我的 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 "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 服务器不会记录失败的连接请求。

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

休息后,代码开始工作。我不记得我是否重新启动了 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
  • 货物 0.13.0-nightly (9399229 2016-09-14)
  • 还针对货物 0.13.0-nightly 进行了测试 (19cfb67 2016-09-28)
4

1 回答 1

4

根据对此错误报告的评论,“Iron 默认将 ('localhost') 解析为 IPv6,而您的其他服务使用 IPv4”

127.0.0.1在该错误未解决时将Iron 绑定到。

于 2016-09-30T08:39:53.073 回答