问题标签 [fire-and-forget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
960 浏览

php - PHP 中的即发即弃

最终更新

好像我确实犯了一个非常简单的错误。由于我已经有一个流实现,我不能开始从流中读取:D


我正在尝试在 PHP中实现类似即发即弃的功能。

来自 php.net

如果我用浏览器打开脚本,这将有效。(显示“abcd”)。但是,如果我用file_get_contents某个库打开它,它会等待约 5 秒并显示第二个文本。

我正在使用 PHP 5.2.11 / Apache 2.0


更新

我似乎对我要完成的工作有些困惑。

我不想使用输出缓冲区隐藏输出(这很愚蠢)。sleep(5)我想让客户端在服务器启动一个可能很长的进程(使用输出缓冲区只是一个副作用。我在不使用输出缓冲区的情况下修改了示例代码。

我不明白的是:为什么这个脚本在从浏览器访问它与在 PHP 中使用file_get_contents("http://dev/test.php")或某些库获取它时表现不同?我在测试中看到的是,例如stream_get_contents在返回任何输出之前实际上会阻塞 5 秒,这与我想要的完全相反。

更新2

更多结果:

  • 浏览器以某种方式响应flush(). 我不知道如何用PHP 中的复制这种行为,我的流一直阻塞。
  • 我试过fread了,发现它的行为类似于stream_get_contents.
  • 指定 amaxlength无效,它仍会阻塞约 5 秒。
  • 更改阻塞模式没有任何效果(除了产生更多的调用to stream_get_contents())。它会在返回任何东西之前等待约 5 秒。
  • stream_set_read_buffer没有效果(在 PHP 5.3.5 服务器上测试)
0 投票
1 回答
688 浏览

c# - 没有 EndInvoke 的 C# ThreadPool 或 BeginInvoke

在网上,关于如何实现“一劳永逸”模式存在非常不同的意见。

有人说,如果必须实现一种即发即弃模式,那么在不调用 EndInvoke 的情况下调用 BeginInvoke 是没有问题的。

其他人说最好创建一个单独的 ThreadPool 对象。我担心的是 ThreadPool 初始化成本。具体来说,调用的方法只是将对象添加到队列中然后返回。

为此,在池上创建线程或简单地同步调用方法是“更快”吗?我想知道一个粗略的工作阈值,这比在池上创建线程更昂贵。

是否有这方面的任何文件,以及在池中捕获异常和其他限制条件呢?

0 投票
2 回答
2446 浏览

java - Java“一劳永逸”线程

我有一个方法

其中AnimationThread实现了runnable,它的构造函数是:

我从小程序的 init() 方法调用它挂起,因为它从不返回值。有没有办法启动这个线程并让 init() 方法完成,以便我的小程序启动!

谢谢

0 投票
1 回答
2611 浏览

spring - 使用 Spring Servet 为 REST API 处理创建异步线程

我想为我的几个 REST API 调用创建即发即弃模型,其中服务器将接受端点上的请求,在释放客户端连接时将对象发送到内部服务进行异步处理。我正在使用 Spring 3 MVC 和 Tomcat 6。我认为在这个阶段引入像 ActiveMQ 或 RabbitMQ 这样的完整消息传递系统对于我的项目来说太过分了。在 tomcat 和 Spring 中为我的服务创建异步处理(线程)是否有任何其他安全的方法?恐怕在tomcat里面做线程编程会破坏它的完整性。谢谢

0 投票
2 回答
272 浏览

perl - 如何使用 Perl 启动多个火灾并忘记 PHP 脚本?

我目前有一个 perl 脚本,我试图用它来启动三个(或更多)php 脚本,每个脚本都有一组从数据库提供的参数:

我不关心 PHP 脚本的任何结果,我只需要一次启动它们,或者延迟很小。

提取工作正常并返回三组唯一的值。但是,它似乎永远无法启动第一个 php 脚本。我没有收到任何错误消息。

非常感激任何的帮助。

0 投票
2 回答
5524 浏览

asp.net - 在 ASP.NET 的后台任务中解析 A​​utofac 组件

在 ASP.NET 中使用 Autofac 和 ContainerDisposalModule,我如何支持具有需要解决的组件依赖项的触发和忘记调用?我遇到的问题是 ASP.NET 请求在任务运行之前完成并处理了请求的生命周期范围,因此任何需要在新线程中解析的组件都会失败,并显示消息“无法解析实例并且嵌套的生命周期不能从这个 LifetimeScope 创建,因为它已经被释放了”。在 ASP.NET 中使用 Autofac 支持触发和忘记呼叫的最佳方法是什么?我不想延迟执行某些可以在后台线程上完成的任务的请求。

0 投票
2 回答
12323 浏览

php - PHP Fire and Forget POST 请求

我正在尝试在 PHP 中创建一个“一劳永逸”的方法,以便我可以将POST数据发送到 Web 服务器而无需等待响应。我读到这可以通过CURL在以下代码中使用 like 来实现:

但是我不认为它按我预期的那样工作。例如,如果我发送请求的 URL 有错误,它也会导致我的脚本抛出错误。如果它是火灾并忘记,我希望不会发生这种情况。

谁能告诉我我做错了什么或提供替代建议。我在本地使用 Windows,在开发、登台和生产环境中使用 Linux。

更新

我在这里找到了一个替代解决方案:http: //blog.markturansky.com/archives/205

我已将其清理为以下代码:

这个似乎对我更有效。

这是一个有效的解决方案吗?

0 投票
1 回答
525 浏览

sql-server - 激活设置不一致

我有一项服务使用了臭名昭著的“即火即忘”模式(不要评判我,我没有创建它),该服务在 SQL Server 2005 上运行良好。我最近升级到 2012,现在 ssbdiagnose 抱怨激活设置不一致:

我试图弄清楚如何解决这个问题,但除了将存储过程添加到“发送”队列之外无法解决,但我不明白为什么这是必要的。

基本设置是:

  1. 插入“扫描到”表格
  2. 触发器调用“发送”服务,如下所示:

    BEGIN DIALOG CONVERSATION @SBDialog FROM SERVICE ScanSendService TO SERVICE 'ScanReceiveService', 'CURRENT DATABASE' ON CONTRACT ScanContract WITH ENCRYPTION = OFF

  3. “接收”服务调用一个存储过程,然后执行不相关的事情。队列详情如下:

    ALTER QUEUE [dbo].[ScanReceiveQueue] WITH STATUS = ON , RETENTION = OFF , ACTIVATION ( STATUS = ON , PROCEDURE_NAME = [dbo].[usp_Process_ScanReceiveQueue] , MAX_QUEUE_READERS = 1 , EXECUTE AS OWNER ), POISON_MESSAGE_HANDLING (STATUS = OFF)

消息进入“发送”队列就好了,但不是“接收”队列。为什么 ssbdiagnose 抱怨这个问题,我该如何解决?

编辑:更多信息,因为似乎没有人有任何想法:(

我看了看,Microsoft.SqlServer.ServiceBroker.Diagnostics.dll似乎所有这些检查都在每个队列上运行,无论是否“配置了激活”,但我什至不知道如何不配置激活......

如果有人感兴趣,来源:https ://gist.github.com/Mansfield7/5766457#file-gistfile1-cs-L12

编辑 2:我打开了该队列的激活并指定了一个什么都不做的存储过程。ssbdiagnose 错误消失了,但队列仍然损坏(接收队列仍然为空)。

0 投票
2 回答
14439 浏览

java - 使用 java.util.concurrent 触发并忘记

如何使用 java.util.concurrency实现“一劳永逸”的行为?我试过了:

但是get()一直阻塞直到完成。调用者对任务的push()结果不感兴趣。

0 投票
0 回答
174 浏览

c# - 管理子工作线程列表

经过这么多研究,我想我应该问专家。

我正在为我的公司雇主开发一个项目,我们有向 Web 服务发出请求的 android 和 iPhone 移动应用程序,该请求处于待处理状态。

Windows 服务检索挂起的请求并为每个请求旋转一个新线程。这是因为请求可以被定向到以不同方式处理请求的不同提供者。一个人可以立即处理请求并返回反馈,其他人可能会收到请求并需要长达 30 秒的时间来返回您必须轮询状态的反馈。

移动应用程序还将轮询请求的状态。

现在我的挑战是:

我正在考虑创建一个线程列表,比如说 100 并分配每个线程来执行一个请求,一旦完成,线程将被重新创建并分配一个新请求。这是一个基于高响应的平台,所以我考虑不使用 ThreadPool。

是否建议在火灾中旋转新线程并忘记序列或管理这些线程列表,如果要管理,那么管理这些线程列表并确保 C# 中的高性能移动应用程序的最佳方法是什么轮询响应。

问候