除了 localhost 之外,我如何指定 IP 地址?
How can I specify an IP address besides localhost?
我正在迈出使用 Scala 和 Finch 的第一步,并进行非常简单的休息 API。目前一切正常,但除了 "localhost" 之外,我无法提供任何服务,而且我没有明显的方法来指定它。
我在谷歌上搜索了一个小时并梳理了文档,但我终究无法确定我应该如何指定 IP 地址
object Main extends App with Endpoint.Module[IO] {
val egService = new EgService
val IPService = new IPService
val hostIP = IPService.getIP
def healthCheck: Endpoint[IO, String] = get(pathEmpty) { Ok("OK") }
def helloWorld: Endpoint[IO, Message] = get("hello") {
egService.getMessage().map(Ok)
}
def sayHello: Endpoint[IO, Message] = get("hello" :: path[String]) {
s: String =>
egService.getMessage(s).map(Ok)
}
def service: Service[Request, Response] =
Bootstrap
.serve[Text.Plain](healthCheck.handle {
case e: Exception => InternalServerError(e)
})
.serve[Application.Json](helloWorld.handle {
case e: Exception => InternalServerError(e)
} :+: sayHello.handle {
case e: Exception => InternalServerError(e)
})
.toService
println(s"Trying to serve $hostIP on port 8080...")
Await.ready(Http.server.serve(":8080", service))
}
正如我所说,上面的代码完全按照我的预期工作,并且我能够卷曲 localhost:8080
以获得适当的响应,但除此之外,我感到很困惑。我尝试指定:
Http.server.serve(s"$hostIP:8080", service)
但这似乎被忽略了。除此之外,我完全感到困惑。使用 http4s
时很简单:
BlazeServerBuilder[IO]
.bindHttp(8080, hostIP)
所以我觉得我一定遗漏了一些明显的东西。
有一个 serve
变体采用 SocketAddress
。它不会为您解析主机名(因为它似乎是通过 http4s 完成的)所以您需要将解析后的地址传递给它。
Http.server.serve(new java.net.InetSocketAddress("192.168.0.1", 8080), service)
请注意,默认情况下,当您简单地传递 ":8081"
时,服务器将监听所有接口(包括 localhost)。
我正在迈出使用 Scala 和 Finch 的第一步,并进行非常简单的休息 API。目前一切正常,但除了 "localhost" 之外,我无法提供任何服务,而且我没有明显的方法来指定它。
我在谷歌上搜索了一个小时并梳理了文档,但我终究无法确定我应该如何指定 IP 地址
object Main extends App with Endpoint.Module[IO] {
val egService = new EgService
val IPService = new IPService
val hostIP = IPService.getIP
def healthCheck: Endpoint[IO, String] = get(pathEmpty) { Ok("OK") }
def helloWorld: Endpoint[IO, Message] = get("hello") {
egService.getMessage().map(Ok)
}
def sayHello: Endpoint[IO, Message] = get("hello" :: path[String]) {
s: String =>
egService.getMessage(s).map(Ok)
}
def service: Service[Request, Response] =
Bootstrap
.serve[Text.Plain](healthCheck.handle {
case e: Exception => InternalServerError(e)
})
.serve[Application.Json](helloWorld.handle {
case e: Exception => InternalServerError(e)
} :+: sayHello.handle {
case e: Exception => InternalServerError(e)
})
.toService
println(s"Trying to serve $hostIP on port 8080...")
Await.ready(Http.server.serve(":8080", service))
}
正如我所说,上面的代码完全按照我的预期工作,并且我能够卷曲 localhost:8080
以获得适当的响应,但除此之外,我感到很困惑。我尝试指定:
Http.server.serve(s"$hostIP:8080", service)
但这似乎被忽略了。除此之外,我完全感到困惑。使用 http4s
时很简单:
BlazeServerBuilder[IO]
.bindHttp(8080, hostIP)
所以我觉得我一定遗漏了一些明显的东西。
有一个 serve
变体采用 SocketAddress
。它不会为您解析主机名(因为它似乎是通过 http4s 完成的)所以您需要将解析后的地址传递给它。
Http.server.serve(new java.net.InetSocketAddress("192.168.0.1", 8080), service)
请注意,默认情况下,当您简单地传递 ":8081"
时,服务器将监听所有接口(包括 localhost)。