`
mengdejun
  • 浏览: 408729 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

php异步调用 提高用户体验

    博客分类:
  • Php
阅读更多

这是我的一个技术很好的朋友写的,要我发表在我的博客上可让php爱好者的读者和爱好php学习的朋友们参考参考.
        案例:PHP语言
某SNS社区,在系统里,用户给自己的好友(好友数量上百)发送邮件,每封邮件内容不一,发送后提示发送完毕!
常用PHP写法
sendmail.php

<?php
$count=count($emailarr);//$emailarr数组为好友的邮件地址
for($i=0;$i<$count;$i++)
{
  sendmail(.....);//发送邮件
}
echo ''发送完毕';
?>

 
假设该次发送100封邮件。本次操作会出现什么结果呢?
用户体验:用户等待->发送数十封邮件出去->系统超时返回错误信息
本次操作由于需要发送大量的邮件,导致php执行时间过长,用户烦躁的等待。当apache或者nginx等待超过允许执行时间,返回超时错误。这个时候用户不明确本次操作到底成功与否,到底发出了几封邮件。
我们可以看出该代码用户体验极差,并且不能够顺利完成任务。
那应该怎么操作呢?
这里提到一个概念,异步执行
用户体验:用户等待->发送完毕
朋友们就会问,怎么缺少发信环节?
OK,发信环节就在用户提交请求的时候,把发信任务转给了一个单独处理发信的php程序处理了,当用户看见“发送完毕”的时候其实信还没发送完,这个时候,发信程序正在后台努力的工作着,一封一封的向外发送
sendmail.php

<?php
$domain="www.***.com";
$url="/system_mail.php";
$par="email=".implode(',',$emailarr)."&........";
$header = "POST $url HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($par) . "\r\n\r\n";
$fp = @fsockopen ($domain, 80, $errno, $errstr, 30);
fputs ($fp, $header . $par);
fclose($fp);
echo ''发送完毕';
?>
system_mail.php
<?php
ini_set("ignore_user_abort",true);
ignore_user_abort(true);//此处的代码需要php.ini开启相关的选项,保证php执行不超时的,不明白,参考我的另一篇文章 “关闭浏览器后,php脚本会不会继续运行”
/*
获取email地址,发信,此处为发信代码
*/
?>

 好了,改成异步方式后,用户提交信息,可以立即得到结果“发送完毕”。信呢,会在后台一封一封的发送,直到发送完毕
本文来源于php爱好者 http://www.phplover.cn/ , 原文地址:http://www.phplover.cn/post/phpyibugongzuotishengyonghutiyan.html

 

分享到:
评论

相关推荐

    php实现异步数据调用的方法

    在PHP中实现异步数据调用是解决长时间运行任务、提高程序执行效率和用户体验的关键。由于PHP不支持原生的多线程,开发者通常利用异步执行的技术来模拟并发处理,使得用户界面能够快速响应,而后台任务则在后台静默...

    php+ajax异步调用 三级联动

    总结起来,"PHP+AJAX异步调用三级联动"是一种常见的Web交互功能,它结合了PHP的服务器处理能力和AJAX的异步通信特性,提供了流畅的用户体验。理解和掌握这一技术对于任何Web开发者来说都是至关重要的。

    PHP异步调用socket实现代码

    对于需要进行大量后台任务处理的场景,尤其是涉及到发送邮件等耗时操作时,使用异步调用技术可以有效地改善用户体验,并提高服务器资源的利用率。 需要注意的是,尽管PHP本身不支持多线程,但通过HTTP请求的多线程...

    4种PHP异步执行的常用方式.除了ajax,你还知道几种异步调用方式?

    在PHP编程中,异步执行是一项关键技能,它允许服务器在处理其他请求的同时进行某些耗时操作,提高系统的响应速度和用户体验。标题提到的“4种PHP异步执行的常用方式”是本文将深入探讨的核心内容。除了大家熟知的...

    php异步操作类库

    "php异步操作类库"是PHP编程中的一个重要主题,它涉及到如何在PHP应用中实现非阻塞的异步处理,以提高应用程序的性能和响应速度。在传统的PHP执行模式下,程序是同步的,即一个任务执行完毕后才会进行下一个任务,这...

    PHP实现异步调用方法研究与分享

    在本文中,我们将深入探讨如何在PHP中实现异步调用,以便提高程序执行效率和用户体验。异步调用允许后台程序在用户无需等待的情况下独立运行,这对于处理耗时的任务,如发送大量邮件,尤为有用。 传统的HTTP协议是...

    js写AJAX 异步调用 -实现回调

    本文将深入讲解如何使用纯JavaScript编写AJAX异步调用,并实现回调函数处理返回的数据,同时涉及XML的XSL转换。 一、AJAX基础 1. 创建XMLHttpRequest对象:在JavaScript中,我们需要首先创建一个XMLHttpRequest...

    ajax 异步传输php代码

    它通过在后台与服务器进行少量数据交换,使网页实现局部刷新,极大地提升了用户体验。在PHP环境中,Ajax可以配合服务器端的PHP脚本实现动态数据交互。** ### 1. Ajax基础原理 Ajax的核心是JavaScript对象...

    基于PHP异步执行的常用方式详解|angluo-php-95943.pdf

    这种方式可以提高程序的响应性,并且对于优化资源使用、改善用户体验方面有着重要价值。文章中介绍的几种PHP异步执行的常用方式包括使用AJAX技术请求服务器、使用popen()函数、利用CURL扩展和采用fsockopen()函数,...

    如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)

    异步加载数据意味着不需要刷新整个页面,就能更新数据,提高用户体验。 在本教程中,我们使用PHP作为服务器端编程语言,jQuery用于简化JavaScript的开发和进行异步HTTP请求(AJAX),MySQL作为数据库存储数据。整个...

    jQuery 异步无刷新删除,前台JS调用后台删除方法

    总之,jQuery异步无刷新删除是通过AJAX技术实现的,它提高了Web应用的用户体验。通过前台JS调用后台删除方法,我们可以轻松地完成删除操作,同时保持页面的实时更新,而不必重新加载整个页面。这样的功能在诸如博客...

    解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)

    此外,为了提高用户体验,开发者还需要考虑到在异步请求失败时给用户合适的反馈信息。 总结来说,解决PHP中异步调用获取数据时出现的错误c00ce56e,关键是确保数据传输过程中的编码格式被正确设置。通过在PHP脚本的...

    html通过js调用php代码实现局部刷新

    本文将深入探讨如何在HTML页面中通过JavaScript调用PHP代码,以实现局部刷新功能,从而提高用户体验。我们将主要关注以下几个方面: 1. **HTML基础**:HTML(超文本标记语言)是网页的基础结构,用于定义网页内容和...

    ajax实现异步提交,对新增用户进行判断的实例

    它强调了如何通过AJAX实时检查用户输入的有效性和可用性,避免了不必要的页面刷新,提高了用户体验。同时,这也是一种常见的防止重复用户名注册的前端验证方法。通过实践这个例子,开发者可以深入理解AJAX的工作机制...

    ajax图片上传 ajaxPHPdemo图片异步上传

    本教程将探讨如何使用AJAX和PHP实现图片的异步上传,这样可以提高用户体验,因为用户无需刷新整个页面即可完成上传操作。 一、AJAX简介 AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个网页的情况下,...

    js+php实现静态页面实时调用用户登陆状态的方法_.docx

    ### js+php实现静态页面...这种方法不仅可以提高用户体验,还可以降低服务器的负载。对于那些需要频繁更新用户状态的静态页面而言,这是一个非常实用的解决方案。希望本文能为从事Web开发的技术人员提供有价值的参考。

    js+php实现静态页面实时调用用户登陆状态的方法.docx

    在Web开发过程中,为了提高网站性能及用户体验,很多开发者会选择将部分页面转换为静态HTML页面。这种方式虽然能够有效降低服务器负担,但对于涉及到用户登录状态的判断与展示则变得较为复杂。本文将详细介绍如何...

    asynhandle(异步加载)

    比如,当用户触发一个操作(如点击按钮),`index.php`会创建一个`AsynHandle`对象,然后调用它的`loadData()`方法来异步获取数据。这个方法内部可能使用了`pcntl_fork()`创建子进程,或者利用像`ReactPHP`、`Swoole...

    yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信

    总之,通过Yii2 Console集成Swoole,我们可以充分利用Swoole的异步能力,将耗时的注册邮件发送和短信通知任务放到后台执行,提升系统的响应速度和用户体验。这个过程涉及到Yii2 Console命令的创建、Swoole服务器的...

Global site tag (gtag.js) - Google Analytics