当前位置: 首页 > news >正文

代理商加盟项目网站网站建设公司 知乎

代理商加盟项目网站,网站建设公司 知乎,html 动漫网站,阿里云wordpress帮助SSE即 server send event 服务器发送事件#xff0c;在在早期可能会使用ajax向服务器轮询的方式#xff0c;使浏览器第一时间接受到服务器的消息#xff0c;但这种频率不好控制#xff0c;消耗也比较大。但是对于SSE来说#xff0c;当客户端向服务端发送请求#xff0c;服…SSE即 server send event 服务器发送事件在在早期可能会使用ajax向服务器轮询的方式使浏览器第一时间接受到服务器的消息但这种频率不好控制消耗也比较大。但是对于SSE来说当客户端向服务端发送请求服务端会抓住这个请求不放等到有数据时才返回给客户端但客户端手动消息后再向服务器发送请求周而复始。这种方式好处是减少了服务器的请求数量也大大减少了服务器的压力。以下是第一种方式的代码的演示浏览器不断向服务器请求服务器用线程睡眠5s再返回结果。1、SseController 控制器import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import java.util.Random;​/*** description: 服务器端推送控制器** author: Shenshuaihu* version: 1.0* data: 2019-06-25 23:29*/Controllerpublic class SseController {​/*** 输出类型 text/event-stream 是对服务器端SSE的支持* 此处每5s向浏览器推送随机消息* return*/RequestMapping(value /push, produces text/event-stream)public ResponseBody String push() {Random random new Random();try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}return data:Testing 1,2,3: random.nextInt() \n\n;}}2、显示结果的页面 sse.jspSSE-Code sse.jsp ​服务器推送 可以用于消息订阅解决长短轮询不是解决问题server send event 当客户端方服务器发送请求时 服务器抓住不放 等有数据时 再回复给客户端客户端收到消息时发给送给服务器如此循环参考内容https://www.jianshu.com/p/bc5a9b4a1cd1​​console.log(!!Window EventSource: !!Window.EventSource)if (!!window.EventSource) {var source new EventSource(push);s ;source.addEventListener(message, function (evt) {s evt.data ;$(#msgFromPush).html(s);});​source.addEventListener(open, function (evt) {console.log(连接打开.)})​// 添加SSE客户端监听获取服务端推送的消息source.addEventListener(error, function (evt) {if (evt.readyState EventSource.CLOSED) {console.log(连接关闭.)} else {console.log(evt.readyState)}}, false);​} else {console.log(你的浏览器不支持SSE.)}​​/*if(window.EventSource){​var eventSource new EventSource(http://localhost:8080/push);​//只要和服务器连接就会触发open事件eventSource.addEventListener(open,function(){console.log(和服务器建立连接);});​//处理服务器响应报文中的load事件eventSource.addEventListener(load,function(e){console.log(服务器发送给客户端的数据为: e.data);});​//如果服务器响应报文中没有指明事件默认触发message事件eventSource.addEventListener(message,function(e){console.log(服务器发送给客户端的数据为: e.data);});​//发生错误则会触发error事件eventSource.addEventListener(error,function(e){console.log(服务器发送给客户端的数据为: e.data);});​}else{console.log(服务器不支持EvenSource对象);}*/​显示的结果SSE-.png二、使用Servlet 3.0 异步方法处理第二种方式演示浏览器循环请求服务端服务端用定时任务每5S设置一下数据返回给浏览器1、开启异步方法的支持 WebInitializer.javaimport org.springframework.web.WebApplicationInitializer;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.servlet.DispatcherServlet;​import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRegistration.Dynamic;​/*** description: Web配置 代替web.xml* author: Shenshuaihu* version: 1.0* data: 2019-06-13 23:22*/public class WebInitializer implements WebApplicationInitializer {Overridepublic void onStartup(ServletContext servletContext) throws ServletException {AnnotationConfigWebApplicationContext context new AnnotationConfigWebApplicationContext();context.register(MyMvcConfig.class);// 新建的webApplicationContext ,注册配置类并将其和当前servletContext关联。context.setServletContext(servletContext);​// 注册SpringMVC 的 DispatcherServletDynamic servlet servletContext.addServlet(dispatcher, new DispatcherServlet(context));servlet.addMapping(/);servlet.setLoadOnStartup(1);// 开启对异步的支持servlet.setAsyncSupported(true);}}2、AsyncController.java 控制层只用掉serviceimport com.ch4.service.PushService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.context.request.async.DeferredResult;​/*** description:** author: Shenshuaihu* version: 1.0* data: 2019-06-27 08:32*/Controllerpublic class AsyncController {Autowiredprivate PushService pushService;​RequestMapping(/defer)ResponseBodypublic DeferredResult deferredCall() {return pushService.getAsyncUpdate();}}3、PushService.javaimport org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;import org.springframework.web.context.request.async.DeferredResult;​/*** description: SSE 定时任务* 在PushService里面产生 DeferredResult 给控制器使用* 通过 Scheduled 定时更新DeferredResult** author: Shenshuaihu* version: 1.0* data: 2019-06-27 08:32*/Servicepublic class PushService {​private DeferredResult deferredResult;​public DeferredResult getAsyncUpdate() {deferredResult new DeferredResult();return deferredResult;}​Scheduled(fixedDelay 5000)public void refresh() {if (deferredResult ! null) {deferredResult.setResult(new Long(System.currentTimeMillis()).toString());}}}3、数据页面async.jsppageEncodingUTF-8%async support-Code defer.jsp ​​​​​deferred();​function deferred() {$.get(defer, function (data) {console.log(data);s ;s data ;$(#defer).html(s)// 完成后在向服务器请求deferred();}​);}​4、需要在核销配置类用开启任务ConfigurationEnableWebMvcComponentScan(com.ch4)EnableSchedulingpublic class MyMvcConfig extends WebMvcConfigurerAdapter {}SSE-aync.png总结SSE用于订阅消息是需要浏览器不断的请求与websocket有相似之处2019/06/30晚于成都
http://www.huolong8.cn/news/8621/

相关文章:

  • 杭州未来科技网站建设网络规划设计师报考条件
  • 容县住房和城乡建设局网站wordpress 账号 登陆不了
  • 江门网站建设报价军事网站模板
  • 青岛网站建设优化设备租赁网站建设
  • 个人做啥网站流量大爱站网使用体验
  • 企业网站建设立项书网站开发销售简历范文
  • 制作网站公司首 荐乐云seo专家网站开发就业外部威胁
  • 广州购物网站建设价格网站漏洞原理
  • 商务网站建设内容建设商城网站费用
  • 漯河北京网站建设百度24小时人工电话
  • 电脑公司网站设计互联网行业的开发网站
  • 商城网站中商品模块有哪些功能校园图书馆网站建设
  • 茌平做网站公司手风琴网站模板
  • 平面设计师看的网站贵阳花溪区
  • 临淄网站建设价格超级工程网站建设
  • wordpress 登陆不了网站的seo
  • 深圳龙岗做网站的公司哪家好优秀企业vi设计案例
  • 广州城市建设网站上海好的高端网站建设服务公司
  • 定制app网站wordpress notfound
  • 青岛市建设网站学网站建设的软件
  • 毕业设计网页制作咖啡网站图片网站开发需要准备什么软件
  • 获取网站物理路径网站关键词最多几个
  • 网站统计数据分析南京江北新区规划图
  • 百度热门排行榜怎么对一个网站做优化
  • wordpress还原站点山东禹城市建设局网站
  • 网站开发费用属于什么科目建立网站的步骤有哪些
  • 做招聘信息的网站有哪些wordpress 双会员系统
  • 毕业设计 网站建设选题网站设计英文翻译
  • 中国建设银行个人登录网站零食网站建设的策划书
  • 济南 网站优化网站推广问题