我在Twitter finagle客户端/服务器上遇到了非常奇怪的行为。
拥有服务器
def start(): Unit = {
val port=8500
println(s"Running Finagle Mock Server in port $port.......")
mockServer = Some(Http.server
.configuredParams(finagle.Http.Http2)
.configured(finagle.Http.Netty4Impl)
.serve(s"localhost:$port", mockService))
}
和客户
override def client():Unit = {
val clientService = Http.newService("localhost:8500")
val future: Future[Response] = clientService(createRequestUsingBuilderWithJson())
future.onFailure(th =>{
println(th)
})
future.onSuccess(value => {
println(value)
})
val response: Response = Await.result(future)
println(response.contentString)
}
@throws[Exception]
def createRequestUsingBuilderWithJson(): Request = {
new RichHttpRequestBuilder()
.withMethod(Method.Get).withPath("/rest_connection/external_service").build
}
如果我在另一个JVM进程中将服务器作为应用程序运行,然后我运行客户端一切都很好,我可以到达服务器并收到200响应。
但是如果不是在另一个进程中首先运行我在samr JVM中运行的服务器,那么在运行客户端之前,通信永远不会到达服务器,我只是在我的onFailure客户端回调中接收
DefaultHttpResponse(chunked: false)
HTTP/1.1 500 Internal Server Error
content-length: 0
Connection: close
知道为什么我不能在同一个JVM中运行客户端/服务器???