#scala #rust #iron
#scala #Ржавчина #железо
Вопрос:
В моем приложении Rust я запускаю Iron следующим образом:
let host: amp;str = amp;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 является правильным. Железный сервер ничего не регистрирует при сбое запроса на подключение.
Различные комбинации Я неправильно диагностировал это. Использование localhost
vs 127.0.0.1
как на клиенте, так и на сервере не решают проблему. 127.0.0.1
в клиенте Rust устраняет проблему.
После перерыва код начал работать. Я не помню, перезапускал ли я Iron. Затем я провел несколько часов разработки против него. На каком-то этапе он снова перестал работать. Перезапуск JVM и / или железного сервера не помогает устранить проблему.
Это не относится к моему приложению Rust;
Я могу воссоздать проблему с помощью примера приложения hello world Iron.
$ git clone https://github.com/iron/iron.git
$ (cd iron amp;amp; 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)
- также проверено на cargo 0.13.0-nightly (19cfb67 2016-09-28)
Комментарии:
1. В вашем приложении Scala, если вы подключитесь к 127.0.0.1 вместо localhost, это сработает? (или аналогично, если вы запустите приложение rust на 127.0.0.1?)
2. Спасибо за предложение, Эрик. После обеда и повторного возвращения он работает. Я не знаю, что могло быть не так, но я предполагаю, что допустил простую ошибку. Удаляю этот вопрос…
3. Восстановлен этот вопрос. Это временная проблема!
4. Предположение 1: вы работаете в Windows, а брандмауэр или антивирус блокируют подключение Java к любому месту.
5. Спасибо за доработку, интересная проблема
Ответ №1:
Согласно этому комментарию к этому сообщению об ошибке, «Железо по умолчанию преобразует (‘localhost’) в IPv6, в то время как другие ваши службы используют IPv4»
Привязать железо к 127.0.0.1
, пока эта ошибка не устранена.