Open waitshang opened 4 years ago
@waitshang Could you please provide the whole test scenario?
@waitshang Could you please provide the whole test scenario?
import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Moco;
import com.github.dreamhead.moco.Runner;
import static com.github.dreamhead.moco.Moco.by; import static com.github.dreamhead.moco.Moco.log; import static com.github.dreamhead.moco.Moco.template; import static com.github.dreamhead.moco.Moco.uri;
/**
Created by shangwei2009@hotmail.com on 2020/5/25 18:31 */ public class Server { public static void main(String[] args) { final HttpServer httpServer = Moco.httpServer(12306, log()); httpServer.request(by(uri("/get"))).response(template("${req.method}"));
final Runner runner = Runner.runner(httpServer);
runner.start();
} }
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
/**
<dependency>
<groupId>com.github.dreamhead</groupId>
<artifactId>moco-core</artifactId>
<version>1.1.0</version>
</dependency>
It seems you close your client before you read.
client.close();
final HttpEntity entity = response.getEntity();
final InputStreamReader inputStreamReader = new InputStreamReader(entity.getContent());
final BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
bufferedReader.lines().forEach(System.out::println);
bufferedReader.close();
simply you can fix it to put close
at the end of this code.
final HttpEntity entity = response.getEntity();
final InputStreamReader inputStreamReader = new InputStreamReader(entity.getContent());
final BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
bufferedReader.lines().forEach(System.out::println);
bufferedReader.close();
client.close();
It seems you close your client before you read.
client.close(); final HttpEntity entity = response.getEntity(); final InputStreamReader inputStreamReader = new InputStreamReader(entity.getContent()); final BufferedReader bufferedReader = new BufferedReader(inputStreamReader); bufferedReader.lines().forEach(System.out::println); bufferedReader.close();
simply you can fix it to put
close
at the end of this code.final HttpEntity entity = response.getEntity(); final InputStreamReader inputStreamReader = new InputStreamReader(entity.getContent()); final BufferedReader bufferedReader = new BufferedReader(inputStreamReader); bufferedReader.lines().forEach(System.out::println); bufferedReader.close(); client.close();
I see. But the problem happens when using complete
.
import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Moco;
import com.github.dreamhead.moco.Runner;
import java.util.concurrent.TimeUnit;
import static com.github.dreamhead.moco.Moco.async;
import static com.github.dreamhead.moco.Moco.by;
import static com.github.dreamhead.moco.Moco.complete;
import static com.github.dreamhead.moco.Moco.latency;
import static com.github.dreamhead.moco.Moco.post;
import static com.github.dreamhead.moco.Moco.template;
import static com.github.dreamhead.moco.Moco.uri;
/**
* Created by shangwei2009@hotmail.com on 2020/5/25 18:31
*/
public class Second {
public static void main(String[] args) {
final HttpServer httpServer = Moco.httpServer(12307);
httpServer.request(by(uri("/notify"))).response(template("${req.method}")).on(
complete(
async(
post("http://localhost:12306/get", "hello"), latency(10, TimeUnit.SECONDS)
)
)
);
final Runner runner = Runner.runner(httpServer);
runner.start();
}
}
Here I setup a Second server which port is 12307. When I request http://localhost:12307/notify, the Second server request Server after 10 seconds. But the Server throws exception when handling the request from Second server.
It doesn't happen using netty to request.