我正在尝试使用 Laravel 8 在后台运行一个耗时的脚本,但无法完全让它工作。我尝试按照此处的文档https://laravel.com/docs/8.x/queues结合此处找到的教程: https: //learn2torials.com/a/how-to-create-background-job -in-laravel
\n根据文档,我应该运行以下命令来制定 Laravel 中的队列/作业策略
\nphp artisan queue:table\nphp artisan migrate\nRun Code Online (Sandbox Code Playgroud)\n然后我们应该使用以下命令创建我们的作业
\nphp artisan make:job TestJob\nRun Code Online (Sandbox Code Playgroud)\n这App\\Jobs\\是我们新创建的作业文件:TestJob.php
再次遵循文档,我应该将耗时的脚本/代码handle()放入TestJob.php. 我在中编写了以下代码handle()为了测试目的,
public function handle()\n{\n //Do some time-consuming stuff\n sleep(30);\n}\nRun Code Online (Sandbox Code Playgroud)\n接下来,根据文档,我们应该在应用程序中的任何位置使用以下代码行来调度我们的作业TestJob::dispatch(),因此出于测试目的,我将这一行直接放入我们的路由文件中,如下所示:
Route::get(\'/\', function () {\n //Run this job in the background and continue\n \\App\\Jobs\\TestJob::dispatch();\n //After job is started/Queued return view\n return view(\'welcome\');\n});\nRun Code Online (Sandbox Code Playgroud)\n正如我从文档中了解到的那样,应该是这样,但它没有按我的预期工作。中的代码handle()被执行,但return …
我怎么能确保startProcess();调用该函数,但没有停止执行myFunction().我猜想有一种方法可以调用一个函数并阻止它返回它的值,从而实现这个目的吗?
伪代码:
function myFunction() {
startProcess();
return $something;
}
function startProcess() {
sleep(5);
// Do stuff that user doesn't should have to wait for.
}
Run Code Online (Sandbox Code Playgroud) 我搜索了这个话题,主要是我面对Apple的限制.我需要每分钟控制一次我的服务器,如果有变化,则发出本地通知.我需要的是,如何让计时器(NSTimer)在后台保持活动状态(或者当设备锁被激活时).任何想法请.谢谢
我正在开发一个需要从头到尾运行协议的应用程序.当从背景中退回时,如何强制应用始终从头开始,无论它离开的位置如何.谢谢
如何在不同线程的后台执行某些操作,如果它在主线程上执行则会阻止我的应用程序的UI.任何人都知道该怎么做?
即使它在后台打印NSLog也没关系.即使用户按下HOME按钮,我也希望运行以下内容.在我的viewController中我这样做了:
- (IBAction)btnStartClicked:(UIButton *)sender {
[NSThread detachNewThreadSelector:@selector(StartBGTask) toTarget:self withObject:nil];
}
-(void)StartBGTask{
[[[UIApplication sharedApplication] delegate] performSelector:@selector(startThread)];
}
Run Code Online (Sandbox Code Playgroud)
并在appDelegate.mi中有这个方法
-(void) startThread {
@autoreleasepool {
for (int i = 0; i < 100; i++) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"current progress %d", i);
});
[NSThread sleepForTimeInterval:1];
}
}
}
Run Code Online (Sandbox Code Playgroud)
它以1秒的间隔打印1到100之间的整数.
我正在编写一个iOS应用程序,它使用Dropbox Datastore API在多个设备之间同步数据.
在Android上,我能够告诉服务在启动时启动,这使它能够同步设备关闭时可能发生的任何更改.
我无法找到一种明确的方式让我的应用在iOS上做同样的事情.
那么,有没有人有任何建议:
必须这样 - Facebook和Gmail等应用程序会在设备完成启动后立即开始同步.
我已经在PhoneGap的背景下阅读了一些关于地理位置的讨论,但我仍然遇到了问题.
我正在开发一个使用地理定位服务的应用程序.在应用程序处于前台的IOS上,一切正常.当应用程序进入后台时(大约30-40分钟后),但地理编码停止工作,我不再获得更改位置事件.在后台期间,应用程序成功地将JSON的时间戳和lng/lat连接到我的远程服务器,所以我知道它在这段有限的时间内正在工作.
我的配置是:
框架工作:PhoneGap 2.5
设备:iOS(在4,4和5 iPhone和iPad4上测试)
iOS版本:7.0.4
Xcode:版本5.0.2(5A3005)
插件:Cordova的PowerManagement插件(2.0+)作者:Wolfgang Koller - GOFG Sports Computer https://github.com/purplecabbage/phonegap-plugins/tree/master/iOS/PowerManagement
startWatch功能:
function onDeviceReady() {
startWatch();
function startWatch() {
var options = { enableHighAccuracy: true, timeout: 3100, maximumAge: 0 };
watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
timerID = setInterval ( updateLocation, 3000 );
}
.
.
Run Code Online (Sandbox Code Playgroud)
App-info plist包括:
"App registers for location updates" under "Required background modes"
&
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
Run Code Online (Sandbox Code Playgroud)
config.xml包括:
<plugin name="PowerManagement" value="PowerManagement" />
Run Code Online (Sandbox Code Playgroud)
问题:
我想知道有没有办法确保PhoneGap中的JavaScript在应用程序处于后台时不断运行?
我是否需要设置Wakelock获取/发布以确保Powermanagement插件在iOS中高效工作?有人可能建议使用不同的插件或配置/代码我可能错过了吗?
干杯,韦恩加德纳悉尼澳大利亚
我在这里有一些要求,现在我想检查这些要求是否可行以及如何达到这些要求.它是关于通知和在后台运行:
通知:本地通知
的问题是您只能将秒,分钟,小时......设置为间隔.无法设置自定义间隔.但是这种类型只适用于我有后台任务,它会搜索更新,如果有更新,它会立即显示本地通知.
另一方面的远程通知需要额外的服务器来进行通知.此外,端口5223必须是开放的以接收通知(但是大多数时候使用蜂窝网络并且这里端口应该是打开的).可以发送多少个远程通知并呈现给用户?对于本地通知,它是64.
运行在后台:
只有iOS的7 Background Fetch和Remote Notficiations可用.问题Background Fetch是只应传输小数据,并且操作系统确定应用程序何时获得时间段(自己的算法从用户学习).消息来源报告最多 执行时间从30秒开始,但我没有找到Apple的官方声明.
Remote Notifications似乎也需要一个提供者.但是在这里,用户会收到通知,应用程序可以在后台下载/同步新数据(同样最多30秒).
iOS 6怎么样?
另一个选择是让app在后台运行/有一个后台线程,它检查某个intervall的更新/同步,然后创建一个本地通知.但该应用程序在后台运行多长时间?我读了大约5秒,这将是短暂的.
另一个是使用推送通知,如果用户启动应用程序则执行同步过程.
beginBackgroundTaskWithExpirationHandler 似乎不适合我的情况.
如何在后台运行并同步时收到通知?
我有执行Nokogiri的方法.即下载页面,提取内容,复制到另一个表格......等.
这个方法是内部帮助器,我需要通过rake任务定期运行.
什么是在任务DRY中调用方法的正确方法.
将代码移动到任务文件移动到模型,普通红宝石一些其他建议......?
请提供rake任务的示例,包括帮助程序
顺便说一句:由于增加了另一个基础设施问题,我不想介绍工作.我现在更喜欢rake任务.在未来,我想转向一些像Sidekiq或类似的后台工作框架
我想在期间运行某个应用程序的集成测试docker build。这些测试要求Redis服务器可用。
redis-server在集成测试步骤(即gradle build?)中如何运行并使其在后台运行?
这是我的精髓Dockerfile:
FROM ubuntu:16.04
# apt-get install stuff
# ...
# install gradle
# build and install redis
WORKDIR /app
ADD . /app
# TODO: start redis-server
# run unit tests / integration tests of app
RUN /opt/gradle/gradle-4.6/bin/gradle build --info
# TODO: stop redis-server
# build app
RUN ./gradlew assemble
# start app with
# docker run
CMD ["java", "-jar", "my_app.jar"]
Run Code Online (Sandbox Code Playgroud) ios ×6
php ×2
cordova ×1
docker ×1
docker-build ×1
dockerfile ×1
geolocation ×1
gps ×1
laravel ×1
laravel-8 ×1
nsthread ×1
nstimer ×1
objective-c ×1
rake-task ×1
ruby ×1
ubuntu ×1