如果我有一个客户端从Jetty服务器请求数据,例如:
private static MessageBean fetchMessage(final String host, final int hostPort, final String path) {
return client.target(String.format("http://%s:%d/%s", host, hostPort, path))
.request(MediaType.APPLICATION_JSON_TYPE)
.get(new GenericType<StateMessageBean>() {
});
}
然后我想要以下行为:
当布尔变量为false时,我希望Jetty Server不发送任何内容,而客户端则无限期地阻塞,直到布尔变量为true。另外,我希望Jetty Server发送响应。
为了更好地理解我的问题,我希望服务器方法的代码看起来像这样:
@GET()
@Path("/message")
@Produces(MediaType.APPLICATION_JSON)
public MessageBean getMessage() {
final MyStore<String, String> myMessageStore = ...
String message = messageStore.readMessage();
boolean messageState = myMessageStore.readBoolean();
if(messageState)
return new StateMessageBean(message);
else
//return something in order for the client to block infinitely
}
还是为了使码头服务器不发送任何内容并让客户端等待,我是否缺少另一种模式? 预先感谢。
答案 0 :(得分:0)
您可以执行以下操作:
while(!messageState) {
Thread.sleep(1000);
messageState = myMessageStore.readBoolean();
}
但是不建议用于Web服务器,因为辅助线程很快就会用完。如果您要拒绝向客户提供服务,则应立即返回403或类似内容。否则,您可以在防火墙级别上进行DROP,但是,当然,将此防火墙决策连接到您的messageState
变量可能并不容易。