Curl 可以连接到本地主机上的 Iron 服务器,但 Scala 间歇性地不能
Curl can connect to an Iron server on localhost, but Scala intermittently cannot
在我的 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 服务器在连接请求失败时不记录任何内容。
客户端和服务器中 localhost
与 127.0.0.1
的不同组合不能解决问题。 我误诊了这个。在 Rust 客户端中使用 127.0.0.1
确实解决了这个问题。
稍作休息后,代码开始运行。我不记得我是否重新启动 Iron。然后我针对它做了几个小时的开发。在某个阶段它再次停止工作。重新启动 JVM and/or 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-nightly (9399229 2016-09-14)
- 还针对 cargo 0.13.0-nightly (19cfb67 2016-09-28) 进行了测试
根据this comment on this bug report、"Iron will resolve ('localhost') to IPv6 by default while your other services use IPv4"
将 Iron 绑定到 127.0.0.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 服务器在连接请求失败时不记录任何内容。
客户端和服务器中 我误诊了这个。在 Rust 客户端中使用 localhost
与 127.0.0.1
的不同组合不能解决问题。127.0.0.1
确实解决了这个问题。
稍作休息后,代码开始运行。我不记得我是否重新启动 Iron。然后我针对它做了几个小时的开发。在某个阶段它再次停止工作。重新启动 JVM and/or 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-nightly (9399229 2016-09-14)
- 还针对 cargo 0.13.0-nightly (19cfb67 2016-09-28) 进行了测试
根据this comment on this bug report、"Iron will resolve ('localhost') to IPv6 by default while your other services use IPv4"
将 Iron 绑定到 127.0.0.1
,而该错误尚未解决。