Laravel 中的长轮询(sleep() 函数使应用程序冻结)

2024-02-09

我正在尝试在 Laravel 中编写长轮询功能,但是当我使用 sleep() 函数时,整个应用程序会冻结/阻塞,直到 sleep() 函数完成。有谁知道如何解决这个问题?

我的 JavaScript 看起来像这样:

function startRefresh() {

longpending = $.ajax({
    type: 'POST',
    url: '/getNewWords',
    data: { wordid: ""+$('.lastWordId').attr('class').split(' ')[1]+"" },
    async: true,
    cache: false
}).done(function(data) {
    $("#words").prepend(data);
    startRefresh();
});

}

还有 PHP:

public function longPolling()
{
    $time = time();
    $wordid = Input::get('wordid');
    session_write_close();
    //set_time_limit(0);

    while((time() - $time) < 15) {
        $words = Word::take(100)->where('id', '>', $wordid)
        ->orderBy('created_at', 'desc')->get();

        if (!$words->isEmpty()) {

            $theView = View::make('words.index', ['words' => $words])->render();

            if (is_object($words[0])) {
                $theView .= '<script>
                $(".lastWordId").removeClass($(".lastWordId").attr("class")
                .split(" ")[1]).addClass("'.$words[0]->id.'");
                </script>';
            }

            return $theView;

        } else {
            sleep(2);
        }
    }
}

我在用着: PHP 5.5 和 Apache 2.2.22

该问题似乎不会发生在 Laravel 之外(在任何 Laravel 项目中)。

提前致谢。


实际上,如果您使用bonez代码,这并不是长轮询。长轮询是指连接保持打开状态(可能超时)直到服务器发送响应。如果客户端每 2 秒发送一个请求并获得响应,那么它只是轮询,在最坏的情况下您会晚 2 秒收到服务器响应。通过长轮询,您就不会出现这种延迟。

Laravel 没有出现冻结问题。会话阻塞。所以使用session_write_close();在调用长轮询方法或使用 cookie 会话驱动程序之前。欲了解更多信息,请参阅http://konrness.com/php5/how-to-prevent-blocking-php-requests/ http://konrness.com/php5/how-to-prevent-blocking-php-requests/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 中的长轮询(sleep() 函数使应用程序冻结) 的相关文章

  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • Laravel 验证 如果勾选复选框,则需要输入文本?

    我一直在阅读 Laravel 验证文档 我不清楚如何结合两个规则 例如
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 缺少依赖项 hive-builtins 会导致 Oozie 构建失败,错误代码为 410

    我尝试从源代码构建 oozie 但安装失败 我想安装 oozie 并热切地等待使用它 我在这个阶段失败了 当我从 oozie 3 3 3 目录给出 cmd 时 bin mkdistro sh DskipTests 我收到这个错误 INFO
  • PHP 在输入流中使用 fwrite 和 fread

    我正在寻找将 PHP 输入流的内容写入磁盘的最有效方法 而不使用授予 PHP 脚本的大量内存 例如 如果可以上传的最大文件大小为 1 GB 但 PHP 只有 32 MB 内存 define MAX FILE LEN 1073741824 1
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 部署在 Apache2 系统上的 Dash 应用程序永远不会让用户通过“正在加载...”,因为它似乎无法找到其 dash .js 文件

    我正在尝试提供 python3 8 2 dash使用 Apache2 服务器的应用程序和mod wsgi 但应用程序停止在 正在加载 屏幕上 服务器为 dash 的每个 js 脚本返回 404 我在使用 dash 的内置本地服务器时没有遇到
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 为什么 Composer 降级了我的包?

    php composer phar update这样做了 删除了 2 3 0 软件包并安装了整个 2 2 5 Zend Framework php composer phar update Loading composer reposito
  • Magento - 自定义支付模块

    这是一个非常普遍的问题 但这里是 我正在尝试在 Magento 中创建一个自定义支付模块 我创建了一个 常规 模块 可以连接到 Magento 事件 观察者模型 但是我如何告诉 Magento 将模块视为支付模块 以便它显示在管理后端和结账
  • 简单的 PHP 表单:电子邮件附件(代码 Golf)

    想象一下 一个用户想要在其网站上放置一个表单 该表单将允许网站访问者上传一个文件和一条简单的消息 该消息将立即通过电子邮件发送 即 该文件未存储在服务器上 或者如果该文件存储在服务器上 仅暂时 作为文件附件 并在邮件正文中添加注释 查看更多

随机推荐

  • 方法:python-pdfkit 将网页(JS生成)转换为PDF

    views py def download as pdf request some stuff function call to get updated with data and JS template and render it ret
  • Laravel Eloquent:SQL 注入预防是自动完成的吗?

    给出示例代码 Message是一个雄辩的模型 public function submit Request request this gt validate request name gt required email gt require
  • 从 cypress 中的函数返回一个值[重复]

    这个问题在这里已经有答案了 import StudentDetails from Department let studentInfo new StudentDetails let studName any it Get Student N
  • 为什么我的 Qt 4.5 应用程序在 Windows 下打开控制台窗口?

    我一直在 Linux 下使用 Qt Creator 4 5 我的应用程序在 Linux 下构建得很好 但如果我在 Windows 中构建 该应用程序总是在启动时打开一个控制台窗口 我可以阻止它这样做吗 我正在使用默认的 MinGW 设置进行
  • 如何提高JPictureBox大图像的绘制速度?

    我有一个 JPictureBox 从 java awt Component 扩展 请参阅此处的代码http pastebin com SAJc6Sht http pastebin com SAJc6Sht 但只有在没有图像拉伸的情况下它才有
  • 撤销对表 pg_proc 上 postgresql 中不起作用的特定列的访问

    我的目标是仅允许特定用户执行特定模式中的函数 按名称列出可用的函数 但看不到函数的源代码或列出其他模式 通过执行以下操作 无需列出可用函数名称即可实现上述目的 首先创建一个测试用户角色 CREATE ROLE test user WITH
  • Java 做 while, while

    当我运行此代码时 我可以期待什么行为 do while testA do stuff while testB 它的行为会像 do while testA do stuff while testB Or if testA do do stuf
  • 仅针对 nginx 上的特定 url 使用 https 重定向

    我正在尝试让 https 与某些 url 一起使用 但似乎 https 无处不在 具体来说 我在 Nginx 上创建了 2 个虚拟主机 第一个虚拟主机的端口为 80 另一个虚拟主机的端口为 443 包含 SSL 现在我的网站 即domain
  • 可视化使用 ANTLR 创建的 AST(在 .Net 环境中)

    为了一个我喜欢的项目 我开始摆弄 ANTLR 在学习了一些教程之后 我现在尝试为我自己的语言创建语法并生成 AST 现在我主要在 ANTLRWorks 中闲逛 但现在我已经验证了解析树似乎没问题 我想 迭代地 因为我仍在学习 仍然需要对最终
  • 授权 Rails_admin 与 pundi

    我使用 pundit gem 进行授权 在我的档案中config initializers rails admin rb RailsAdmin config do config config authorize with pundit co
  • 如何从 C# 嵌入式资源获取文件夹名称

    我想以文件系统排序资源的方式来排序资源 我无法对名称进行 string split 因为文件夹由 分隔 字符 而不是 字符 这意味着文件夹或文件名中包含任何句点都会破坏排序 有没有办法更改分隔符 或获得嵌入资源的原始位置的不同细分 这将为您
  • Python 中的 Plotly-Dash 库存应用程序,带有客户端回调(x 轴缩放上的 y 轴自动缩放)

    我正在使用 xaxis 滑块在 dash plotly python 中创建一个简单的股票图表应用程序 滑动 x 轴时 我希望 y 轴动态重新缩放到视图 我想我已经设法在通过 relayoutData 挂钩滑动 xaxis 刻度时触发回调函
  • 迁移到 .Net4 后,C# 出现“语言不支持”错误

    我正在尝试将我们的网站从 Net 3 5 迁移到 4 但遇到了一个非常奇怪的问题 一旦我瞄准 Net4 在 3 5 中运行得很好的代码就不再运行了 给了我错误 该语言不支持 xxx TimeZoneInfo tzi calendarItem
  • 如何在 Ruby 中输出前导零?

    我正在从 Ruby 脚本输出一组编号的文件 这些数字来自递增计数器 但为了使它们在目录中很好地排序 我想在文件名中使用前导零 换句话说 文件 001 代替 file 1 有没有simple将数字转换为字符串时添加前导零的方法 我知道我可以做
  • 使用泛型和 jpa EntityManager 方法

    我可以同时使用泛型和 JPA 吗 我正在尝试将四个类的对象持久保存到我的数据库中 这是我的 PersistService 类 public class PersistService
  • 从 erlang 插入 cassandra

    我正在尝试从 Erlang R14B02 通过 thrift 0 6 1 将一些内容插入到 cassandra 0 7 6 中 我正在做以下事情 读取记录定义 rr cassandra types 连接到卡桑德拉 ok C thrift c
  • TopMost = true 的 WinForms 对话框

    我在 WinForms 中实现了一个对话框 该对话框在屏幕右下角显示为通知对话框 问题是 无论何时显示 它都会获得焦点 并且只有当 TopMost true 时才会发生这种情况 我该如何解决这个问题 您需要继承 Form 并覆盖几个属性 F
  • 每个 Docker 容器一个或多个数据库

    假设我有几个不同的容器 每个容器都使用自己的数据库 在这种情况下 关于性能的最佳实践是什么 运行一个容器 比如一台 MySQL 服务器 其中包含所有数据库 还是每个数据库运行一个数据库服务器容器 除了表演之外 任何其他评论都将受到欢迎 由于
  • Android Studio 3.1.1中Aapt2错误

    我将 android studio 从 2 2 更新到 3 1 它总是给我aapt2 error并且构建失败 我添加了android enableAapt2 false在 gradle properties 中 我的项目成功构建 但出现警告
  • Laravel 中的长轮询(sleep() 函数使应用程序冻结)

    我正在尝试在 Laravel 中编写长轮询功能 但是当我使用 sleep 函数时 整个应用程序会冻结 阻塞 直到 sleep 函数完成 有谁知道如何解决这个问题 我的 JavaScript 看起来像这样 function startRefr