代码拉取完成,页面将自动刷新
socket-timeout
读超时时长,服务端在超时前返回响应,这个超时时长可以设置的长一点,如30秒。基于HTTP协议的长轮询在实时性上比上websocket稍有不足,比下HTTP简单轮询有余。
package javax.servlet;
public interface ServletRequest {
public AsyncContext startAsync();
public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse);
}
HttpServletRequest request;
HttpServletResponse response;
AsyncContext asyncContext = request.startAsync((request, response); //开启异步请求上下文
详见io.longpolling.test.controller.ResourceController
用例
public class ResourceController {
private static final String RESOURCE_SAY_HELLO = "SayHello";
@GetMapping("/waitSayHello")
public void waitSayHello(HttpServletRequest request, HttpServletResponse response, String who, Integer timeout) {
//请求基础信息
RequestParam curRequestParam = RequestParam.newInstance(RESOURCE_SAY_HELLO, who);
//响应超时设置及返回结果
TimeoutResult timeoutResult = TimeoutResult.newInstance(timeout, "Resp Timeout, but hello world for you!", HttpStatus.REQUEST_TIMEOUT);
//开启异步响应
AsyncResponseTask.buildAndStart(request, response, curRequestParam, timeoutResult);
}
}
public class ResourceController {
private static final String RESOURCE_SAY_HELLO = "SayHello";
@PutMapping("/sayHello")
public String sayHelloForWe() {
final Collection<AsyncResponseTask> sayHelloRespTaskWaitList = AsyncResponseTask.getAsyncTask(RESOURCE_SAY_HELLO);
final int total = sayHelloRespTaskWaitList.size();
sayHelloRespTaskWaitList.forEach(asyncResp -> {
RequestParam requestParam = asyncResp.getRequestParam();
String who = (String) requestParam.getParam();
String result = String.format("Hello %s!", who);
asyncResp.returnJsonResult(result, HttpStatus.OK); //完成异步响应
log.debug("--->say hello for {} success!", who);
});
return String.format("say hello for %s people!", total);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。