轮询机制

第一次更新
#
1、
轮询是用来解决服务器压力过大的问题的。如果保持多个长连接,服务器压力会过大,因此。专门建立一个轮询请求的接口,里面只保留一个任务id,只需要发送任务id,就可以获取当前任务的情况。如果返回了结果,轮询结束,没有返回则等待一会儿,继续发送请求。
2、
轮询不应该直接暴露出来,应该写在接口里面。比如说。请求一个列表,列表接口里面再调用轮询接口。
3.
列表接口发送请求,返回任务id,2秒后,根据任务id发送轮询接口请求,返回结果为无。。继续等待,4秒后,继续发送轮序请求,请求若返回结果,上抛到列表接口结果,列表接口结果继续上抛,请求结束
#

1.命令请求—–服务器响应已收到请求—-返回任务id

2.更新任务id,发起轮询请求—1轮 – 2秒—–返回结果非任务id情况结束请求—-或者服务器唯一标识
3.更新任务id,发起轮询请求 —2轮 – 4秒 —–返回结果非任务id情况结束请求—-或者服务器唯一标识
4.更新任务id,发起轮询请求 —3轮 —6秒—–返回结果非任务id情况结束请求—-或者服务器唯一标识
5.更新任务id,发起轮询请求 —3轮 —8秒 —–返回结果非非任务id情况结束请求—-或者服务器唯一标识

6,结束任务——————过滤掉之后返回的任何结果。。都认为是失败

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Java 中实现长轮询机制可以使用 Servlet 或者基于 Servlet 的框架,如 Spring MVC。下面是一个使用 Servlet 实现长轮询的示例代码: ```java @WebServlet("/api/data") public class LongPollingServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应类型为 JSON response.setContentType("application/json"); // 模拟获取数据的过程 // 例如,可以查询数据库或者调用外部接口来获取数据 String data = getData(); if (data != null) { // 有新数据可用时,将数据作为响应发送给客户端 response.getWriter().write(data); response.getWriter().flush(); } else { // 没有新数据可用时,将请求挂起,并保持连接打开 synchronized (this) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收到新数据时,唤醒挂起的请求 synchronized (this) { notifyAll(); } } private String getData() { // 返回获取到的数据,如果没有数据可用,返回 null // 例如,可以从数据库或其他资源中获取数据 return null; } } ``` 在上面的示例中,`/api/data` 路径对应的 Servlet 类 `LongPollingServlet` 用于接收长轮询请求。在 `doGet` 方法中,首先设置响应类型为 JSON,然后模拟获取数据的过程。如果有新数据可用,将数据作为响应发送给客户端;如果没有新数据可用,将请求挂起,并保持连接打开,直到有新数据到达或超时。在 `doPost` 方法中,接收到新数据时,唤醒挂起的请求。 这只是一个简单的示例,实际情况可能需要根据具体需求对代码进行更多的处理和优化。另外,长轮询机制也可以通过使用 WebSocket 或其他推送技术来实现,这些方法可以实现实时的双向通信,而不需要轮询
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值