传统的ajax都是由客户端主动去请求,服务端才可以返回数据

而sse是建立一个通道,并且在断线后自动重连,由服务端去推送,不需要客户端去主动请求,只需要建立通道

websocket是双向通信 客户端可以利用通道推送数据给服务端 服务端也可以推送数据给客户端

在有些场景,例如用户端调起支付,没有返回支付通知,需要向后端请求,获取这笔订单的支付结果

例如微信公众号内使用支付宝支付,是调不起来的,只能引导用户浏览器打开,由浏览器调起支付宝客户端进行支付

这时候微信公众号内的页面,是不知道支付结果的

常规操作是ajax 心跳查询 每隔一秒或者两秒向后端请求,获取这笔订单是否是支付成功的

但是性能很差,大量的请求,数据库压力会很大

用sse建立通道,因为这里客户端不需要向服务端推送数据 只需要获取,而且sse可以自动断线重连

服务端只需要每秒查询一次数据库,推送数据给客户端即可 但是这样性能也很差,还是要查库

最好的方法是在支付回调处,修改数据库订单状态的同时,向redis插入 例如order_pay_订单号 后端查询订单状态的时候,就无需就查库,直接去redis查询,如果有这个键,则支付成功,如果没有,则继续查询,这样查询支付结果,不需要查库操作,只需要查询redis,性能很高

客户端demo

if(typeof(EventSource) !== "undefined") {

var source = new EventSource("./test17.php");

source.onmessage = function(res){

var data = JSON.parse(res.data);

console.log(data);

$('#result').html("

" + data.msg + "

");

};

}else{

console.log('您的浏览器不支持SSE');

}

服务端demo<?php

//设置SSE的header头部

header('X-Accel-Buffering: no');

header('Content-Type: text/event-stream');

header('Cache-Control: no-cache');

ob_end_clean();//清空缓冲区并关闭输出缓冲

ob_implicit_flush(1);//每当有输出,例如echo的时候,就直接传输,不在缓冲区

//设置死循环,并sleep

while(true){

//设置要返回的数据

$data = [

"status" => 1,

"msg" => '北京时间'.date('Y-m-d H:i:s'),

];

//按规则去拼接

$str = 'id: '.time()."\n";

$str .= "event: message\n";

$str .= "data: ".json_encode($data)."\n\n";

echo $str;

sleep(1);

}

?>版权属于:本文是原创文章,版权归 吾梦小站 所有。

本站所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

您可以自由地转载和修改,但请务必注明文章来源并且不可用于商业目的。

sse服务器推送性能,SSE 服务端向客户端推送相关推荐

  1. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  2. netty服务器返回信息关闭,netty4 服务端同步客户端返回的结果

    netty是一个异步通讯框架,在有的时候咱们想使用服务端向客户端发送消息,服务端同步等待客户端返回结果真进行下一步的业务逻辑操做.那要怎么作才能同步获取客户端返回的数据呢?这里我用到了JDK中的闭锁等 ...

  3. java websocket修改为同步_服务端向客户端推送消息技术之websocket的介绍

    websocket的介绍 在讲解WebSocket前,我们先来看看下面这种场景,在HTTP协议下,怎么实现. 需求: 在网站中,要实现简单的聊天,这种情况怎么实现呢?如下图: ​ 当发送私信的时候,如 ...

  4. eas系统服务器地址,EAS7.0EAS7.5服务端及其客户端标准配置介绍

    金蝶EAS是基于JavaEE的大型企业应用.目前服务端支持以下主流软硬件环境. 适用版本:EAS7.0 EAS703 EAS7.5 1.金蝶EAS服务端支持的软硬件环境 注:标志为部署支持的环境,可以 ...

  5. web 服务端与客户端交互

    Web server to client communication Technology 1.   Traditional solution 传统模式的 Web 系统以客户端发出请求.服务器端响应的 ...

  6. 基于 SSE 实现服务端消息主动推送解决方案

    一.SSE 服务端消息推送 SSE 是 Server-Sent Events 的简称, 是一种服务器端到客户端(浏览器)的单项消息推送.对应的浏览器端实现 Event Source 接口被制定为HTM ...

  7. 易语言服务端与客户端怎么传送_配置中心是怎么推送的?动手实现一个 Long Polling 长轮询...

    介绍 众所周知,数据交互有两种模式:Push(推模式).Pull(拉模式). 推模式指的是客户端与服务端建立好网络长连接,服务方有相关数据,直接通过长连接通道推送到客户端.其优点是及时,一旦有数据变更 ...

  8. 免费开源iPhone推送消息工具+服务端-Bark

    什么是Bark Bark 是一款纯推送提醒服务,主要用来给自己的 iPhone 发送自定义内容的推送,可以是文字.链接,不提供历史记录功能,阅后即焚.服务端和客户端均开源,实时性和稳定性都非常可靠,支 ...

  9. Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务

    Asp.net webApi 通过WebSocket推送消息给客户端,搭建一个即是服务端又是客户端的服务_IT_ziliang的博客-CSDN博客 WebSocket是一种在单个TCP连接上进行全双工 ...

最新文章

  1. 因融资失败,应用崩溃,3 名程序员被“祭天”!
  2. 一些蛮好的题目,学习
  3. 常见Python爬虫工具总结
  4. 有了malloc/free,为什么还要new/delete?
  5. github gists_Eclipse中的Github Gists
  6. java—IO流——读取键盘输入的字母并转换成大写字母输出在控制台上
  7. 迁移到 Centos 7 遇到的一些常见问题
  8. 【状压dp】【POJ2288】Islands and Bridges【Hamilton路】
  9. java后端社招面试经历
  10. 锐捷网络2019年秋招售前产品经理面试总结
  11. java oop 题目_JavaOOP试题JavaOOP试题.doc
  12. java语法 chm_使用java代码打开chm格式的帮助文档
  13. android切换夜间模式吗,Android切换夜间模式
  14. 计算机考研数学和英语难吗,英语难还是数学难
  15. 30个不可不知的容器技术工具和资源
  16. 1367:查找二叉树
  17. 浅析copy和deepcopy
  18. 区块链投资700元就能赚
  19. 用python的tkinter做游戏(七)—— 双人射击游戏Demo(类的应用) 篇
  20. Transformer课程 业务对话机器人Rasa 3.x Fallback and Human Handoff

热门文章

  1. 查看及更改计算机名或域,如何查看和修改计算机名、域和工作组
  2. matlab对照片进行磨皮美白,人像照片快速磨皮美白处理的PS技巧
  3. Nginx获取真实用户IP
  4. 解决bug--解决VS2019“无法下载安装文件,请检查网络设置”问题
  5. 异步FIFO设计:各个模块的作用及Verilog代码详解
  6. UV法测量cod原理及特点
  7. 机器学习课后题——贝叶斯
  8. COB-软封装的一些理解
  9. 2021海口高考调研成绩查询,2021年海口市高考调研测试附答案.doc
  10. CTSCAPIO 2017游记