java - 阻止对 Jetty 服务器的请求
问题描述
如果我有一个客户端从 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 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
}
或者为了让码头服务器什么都不发送而让客户端等待,我是否缺少另一种模式?提前致谢。
解决方案
您可以执行以下操作:
while(!messageState) {
Thread.sleep(1000);
messageState = myMessageStore.readBoolean();
}
但这不建议用于 Web 服务器,因为工作线程会很快用完。如果您想拒绝为客户提供服务,那么您应该立即返回 403 或其他内容。否则,您可以在防火墙级别 DROP,但是,当然,将此防火墙决策连接到您的messageState
变量可能并非易事。
推荐阅读
- maven - 如何通过 pom.xml 运行的 mvn 包含多个 cucumber runner 类
- python - 事件前后的 Pandas 数据框列编码 - 时间序列
- python - 无法在 Vultr 中找到 json 文件
- c# - 在 C# 中使用 while 循环计算所有用户输入数字的平均值
- python - Python中基于SIFT关键点匹配的If语句
- c++ - 使用 Visual Studio 静态链接 Sdl-image
- c# - Microsoft.AspNetCore.ApiAuthorization.IdentityServer - 使用版本 5 而不是 6
- react-leaflet - 反应传单地图不显示
- java - 为什么 postRotate() 方法改变 X 轴方向
- c# - 无法通过 Web 服务在数据库中创建用户和更新用户