阻止对 Jetty 服务器的请求
Blocking Request to Jetty Server
如果我有一个客户端从 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>() {
});
}
然后我想要以下行为:
当布尔变量为假时,我希望 Jetty 服务器不发送任何内容,客户端无限阻塞,直到布尔变量为真。否则我希望 Jetty 服务器发送响应。
为了更好地理解我的问题,服务器方法的代码我希望它看起来像这样:
@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
}
或者我是否缺少另一种模式,以便码头服务器不发送任何内容并让客户端等待?
提前致谢。
你可以这样做:
while(!messageState) {
Thread.sleep(1000);
messageState = myMessageStore.readBoolean();
}
但不建议将此用于 Web 服务器,因为工作线程很快就会 运行 退出。如果您想拒绝为客户提供服务,那么您应该立即 return 一个 403 或类似的东西。否则你可以在防火墙级别上 DROP,但是,当然,将这个防火墙决定连接到你的 messageState
变量可能不是微不足道的。
如果我有一个客户端从 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>() {
});
}
然后我想要以下行为:
当布尔变量为假时,我希望 Jetty 服务器不发送任何内容,客户端无限阻塞,直到布尔变量为真。否则我希望 Jetty 服务器发送响应。
为了更好地理解我的问题,服务器方法的代码我希望它看起来像这样:
@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
}
或者我是否缺少另一种模式,以便码头服务器不发送任何内容并让客户端等待? 提前致谢。
你可以这样做:
while(!messageState) {
Thread.sleep(1000);
messageState = myMessageStore.readBoolean();
}
但不建议将此用于 Web 服务器,因为工作线程很快就会 运行 退出。如果您想拒绝为客户提供服务,那么您应该立即 return 一个 403 或类似的东西。否则你可以在防火墙级别上 DROP,但是,当然,将这个防火墙决定连接到你的 messageState
变量可能不是微不足道的。