zoukankan      html  css  js  c++  java
  • SSE

    最近尝试了一下服务器端的推送,之前的做法都是客户端轮询,定时向服务器发送请求。但这造成了我的一些困扰:

    1:轮询是由客户端发起的,那么在服务端就不能判别我要推送的内容是否已经过期,因为我很难判断某个信息是否已经推送给全部的客户端,那么服务端就需要缓存大量的数据。如果数据保存在数据库,那么还要每次请求都需要查询数据库,这对数据库和系统设计都是一个很大的挑战。

    2:请求的频率太高,每次的请求包中含有同样的数据,这对pc来说也许算不得什么,但是对于移动客户端来讲,这应该不是最佳的方案。尤其是遇到还要做权限判断的时候,那么服务端的逻辑和效率也会造成用户体验的降低。

    js代码

    function listenBack(){
            var es = new EventSource("/sprig-blog/mobile/isLogin");
            es.addEventListener("message", function(e){
                console.log('data ', e.data)
                var data = JSON.parse(e.data);
                alert(data.curDate);
            },false);
        }

    后台代码:

    @RequestMapping(value = "/isLogin", method = RequestMethod.GET)
        public void isLogin(HttpServletRequest request, HttpServletResponse response) {
            Result result = new Result();
            result.setSuccess(true);
            //this.print(result, response);
            response.setContentType("text/event-stream");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = null;
            try {
                out = response.getWriter();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String eventJson = "{"curDate":"" + new Date() + ""}";
            out.println("data:" + eventJson + "
    
    ");  //js页面EventSource接收数据格式:data:数据 + "
    "
    
            out.flush();
        }

    返回的信息必须以data开头

  • 相关阅读:
    OSG学习笔记0——解决OSG读obj模型问题[转]
    Shell脚本——make命令和Makefile文件【转】
    Makefile教程(绝对经典,所有问题看这一篇足够了)【转】
    cmake 手册详解【转】
    Grafana密码恢复
    nsenter的用法
    ssh “permissions are too open” error
    CoreDns配置以及外部dns使用
    Prometheus监控系统-Alertmanager Silences静默配置
    linux下解决bash: syntax error near unexpected token `(' 的错误
  • 原文地址:https://www.cnblogs.com/zyxiaohuihui/p/9290523.html
Copyright © 2011-2022 走看看