2016-09-29 1 views
1

В моем Rust приложении может, я начинаю Iron так:Curl может подключиться к Железным серверу на локальном хосте, но Scala периодически не

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.can.Http$ConnectionAttemptFailedException: Connection attempt to 127.0.0.1:3000 failed 

Обе эти попытки из того же IP и локальный правильно. Сервер Iron ничего не регистрирует при неудачном запросе на соединение.

Различные комбинации localhost vs 127.0.0.1 как на клиенте, так и на сервере не устраняют проблему. Я неправильно определил это. Использование 127.0.0.1 в клиенте Rust устраняет проблему.

После перерыва код начал работать. Я не помню, перезапустил ли я Iron. Затем я сделал несколько часов разработки против него. На каком-то этапе он снова начал работать. Перезапуск сервера JVM и/или Iron не помогает устранить проблему.

Это не относится к моему приложению Rust;

Я могу воссоздать проблему с примером hello world Iron app.

$ 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-ночные (9399229 2016-09-14)
  • также испытано против груза 0.13.0-nightly (19cfb67 2016-09-28)
+2

В вашем приложении Scala, если вы подключитесь к 127.0.0.1, вместо localhost, это сработает? (или аналогично, если вы начинаете приложение ржавчины на 127.0.0.1?) –

+0

Спасибо за предложение Эрик. После обеда и возвращения, он работает. Я не знаю, что могло быть неправильно, но я предполагаю, что совершил простую ошибку. Удаление этого вопроса ... – Synesso

+0

Восстановил этот вопрос. Это прерывистая проблема! – Synesso

ответ

4

Согласно this comment on this bug report, «Железный рассосется („локальный“) на IPv6 по умолчанию в то время как ваши другие сервисы используют IPv4»

Bind железо в 127.0.0.1 пока что ошибка не решена.

Смежные вопросы