我正在寻找框架来安排数据库中填充的一组任务
JPA 实体看起来像这样
@Entity
class Task extends Model {
@NotNull
@Min(1L)
@Column(name = "interval_ms", nullable = false)
Integer interval
@NotNull
String payload
@NotNull
Boolean enabled
}
@Entity
class TaskResult extends Model {
@ManyToOne(optional = false)
Task task
@Column(nullable = false)
Boolean result
@Column(nullable = false)
String message
}
Run Code Online (Sandbox Code Playgroud)
任务应在“间隔”字段中定义的每个间隔执行,结果应写入 TaskResult 表
任务的目的是发出 GET 或 POST 请求,因此必须池化请求以避免出现大量任务开始并行执行的情况。
我正在使用弹簧靴。
这里的最佳实践是什么?
我有一个轮询用例,其中:
这就是我目前的实现方式:
this.trackSpoke$ = interval(5000)
.pipe(
timeout(250000),
startWith(0),
switchMap(() =>
this.sharedService.pollForAPropertyValue(
"newuser"
)
)
)
.subscribe(
(data: SpokeProperty) => {
this.CheckSpokeStatus(data);
},
error => {
this.trackSpoke$.unsubscribe();
this.createSpokeState.CdhResponseTimedOut();
}
);
private CheckSpokeStatus(data) {
if (data.PropertyValue === "5") {
this.trackSpoke$.unsubscribe();
//display success
} else {
//keep the polling going
}
}
Run Code Online (Sandbox Code Playgroud)
但是,上述实现并没有超时。
需要做什么才能让它超时并且我能够实现所有提到的用例?
假设您有一个可以在每次动作发送时发送POST请求的应用程序.它允许订阅快速,轻松地添加/删除.
假设该站点是Stackoverflow,它可以在每次询问新问题时发送POST通知.有没有办法在浏览器中使用这样的通知?
我想象一个案例,当你在页面上花费> 5分钟时,如果自上次刷新页面以来它已经更新,你会开始收到通知.我知道如何通过长轮询来实现这一点,但我想知道是否有任何方法可以从浏览器挂钩这些服务器到客户端的POST请求(相对于重复的GET客户端到服务器请求)并将数据推送到相反.
我来自PHP环境(至少在web开发方面)和Ruby的美丽世界,所以我可能会有一些愚蠢的问题.我想在不使用PHP时有一些根本不同的选项.
在PHP中,我们使用memcache来存储我们想要在页面顶部的栏中显示的警报.当发生某些事件产生警报(例如正在制作新的博客帖子)时,每5分钟左右运行一次的cron脚本会将该信息放入内存缓存中.
现在,当用户访问该站点时,我们会查看memcache以查找他们尚未解除的任何警报,并显示它们.
我猜测我在Rails中可以采取不同的做法,就是绕过对cron脚本的需求,并且还需要在每个请求中查看memcache,方法是使用Singleton和在单独的线程中运行的轮询进程从memcache复制到这个单例.理论上,这将比每次请求检查memcache更优化,并且还将轮询逻辑封装到一个位置,而不是在cron任务和查找逻辑之间进行拆分.
我的问题是:当Rails应用程序运行时,是否有任何警告要在后台运行某种runloop?我从Objective-C/Java了解多线程的含义,但我特别询问Rails(3)环境.
基本上是这样的:
class SiteAlertsMap < Hash
include Singleton
def initialize
super
begin_polling
end
# ... SNIP, any specific methods etc ...
private
def begin_polling
# Create some other Thread here, which polls at set intervals
end
end
Run Code Online (Sandbox Code Playgroud)
这让我陷入了类似的问题.我们将(加密的)任务推送到SQS队列,用于与电子商务和长时间运行的后台任务相关的事务.我们不使用cron,而是使用PHP编写的worker守护进程,它在后台运行.现在,当我们部署时,我们必须关闭这个工作人员并从新的代码库再次启动它.在Rails中,我能以某种方式让这个过程开始和停止使用rails服务器(独角兽)本身吗?我不认为这是我在主进程中在一个单独的线程中运行的东西,因为我们经常希望将它作为一个进程单独控制,但如果它只是在Web应用程序运行时方便地运行会很好.
嗨,我正在使用backbone.js在paly2.0框架应用程序(使用java)上工作.在我的应用程序中,我需要定期从数据库中获取表数据(对于显示即将发生的事件列表的用例以及是否应该从列表中删除旧事件).我正在显示数据,但是问题是定期访问数据库.为此我尝试使用backbone.js轮询概念按照这些链接使用Backbone.js轮询集合,http://kilon.org/blog/2012/02/backbone-poller/ .But他们没有从db中查询最新的集合.请建议我如何实现这个或任何其他选择?谢谢你.
我制作了网站,其中各种其他网页都是内置为"app"的i框架:
<iframe id="frame1" src="./app1.php">
<iframe id="frame2" src="./app2.php">
Run Code Online (Sandbox Code Playgroud)
在这些应用程序中,执行了javascript代码,其中包括非常频繁的HTTP请求.
$('#app1button').click(function () {
//Here i have to stop the HTTP-Requests which where fired from the JS of App2
hideAllApps();
showApp(app1);
});
Run Code Online (Sandbox Code Playgroud)
app1非常频繁地从服务器轮询信息:
app1.php里面有Javascript ::
Handler = window.setInterval(getStatus, 100); //start status messages
Run Code Online (Sandbox Code Playgroud)
当我现在点击app2时,另一个应用程序弹出,我想停止由于性能原因加载到app1.php中的javascript.
$('#app2button').click(function () {
//Here i have to stop the HTTP-Requests which where fired from the JS of App1
hideAllApps();
showApp(app2);
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?你有什么想法?
提前致谢.
我有以下代码,每隔5秒调用一次web服务.此webs服务检查列表中是否有任何内容.
setTimeout(function () {
_getListItems();
}, 5000);
Run Code Online (Sandbox Code Playgroud)
但是,我不是每隔5秒检查一次,而是想在页面加载时检查它,之后每分钟检查一次.如果列表中找到了某些内容,请每隔5秒开始调用一次.谁能帮我这个?
在C#中使用Rx我正在尝试创建REST API的轮询请求.我面临的问题是,Observable需要按顺序发送回复.意味着如果请求A在X时间进行并且请求B在X + dx时间进行并且B的响应在A之前出现,则Observable表达式应该忽略或取消请求A.
我编写了一个示例代码,试图描述该场景.我如何解决它只获得最新的响应,取消或忽略以前的响应.
class Program
{
static int i = 0;
static void Main(string[] args)
{
GenerateObservableSequence();
Console.ReadLine();
}
private static void GenerateObservableSequence()
{
var timerData = Observable.Timer(TimeSpan.Zero,
TimeSpan.FromSeconds(1));
var asyncCall = Observable.FromAsync<int>(() =>
{
TaskCompletionSource<int> t = new TaskCompletionSource<int>();
i++;
int k = i;
var rndNo = new Random().Next(3, 10);
Task.Delay(TimeSpan.FromSeconds(rndNo)).ContinueWith(r => { t.SetResult(k); });
return t.Task;
});
var obs = from t in timerData
from data in asyncCall
select data;
var hot = obs.Publish();
hot.Connect();
hot.Subscribe(j …Run Code Online (Sandbox Code Playgroud) 我想要实现的目标:我希望每5分钟轮询一次来自网络的资源,但只有在有观察者订阅的情况下.我使用BehaviorSubject和interval observable进行池化.我设法实现了它,但我是Rx的新手,我认为它可以做得更好.
这就是我做到的方式:
private BehaviorSubject<String> observable;
private Subscription> subscription;
public Subscription subscribe(final Action1<String> action) {
if (observable == null) {
observable = BehaviorSubject.create();
}
if (subscription == null) {
Observable<String> source = Observable.interval(5, TimeUnit.MINUTES).map(new Func1<Long, String>() {
@Override
public String call(Long aLong) {
return getDataFromServer();
}
}).observeOn(AndroidSchedulers.mainThread());
subscription = source.subscribe(new Action1<String>() {
@Override
public void call(String s) {
if (observable.hasObservers()) {
observable.onNext(s);
} else {
subscription.unsubscribe();
subscription = null;
}
}
});
}
return observable.subscribe(action);
}
Run Code Online (Sandbox Code Playgroud)
这个想法: - 我有一个可观察的轮询源和客户可以订阅的另一个observable(使用BehaviourSubject实现 - …
处理文件后如何在spring集成处理后移动文件..?我已经按照 http://xpadro.blogspot.com/2016/07/spring-integration-polling-file.html 来实现文件轮询,但我需要添加onSuccess和OnError跨国事件(没有XML配置)
polling ×10
javascript ×3
ajax ×1
alerts ×1
angular ×1
backbone.js ×1
browser ×1
c# ×1
iframe ×1
java ×1
jquery ×1
observable ×1
play2-mini ×1
poller ×1
recursion ×1
ruby ×1
rx-android ×1
rx-java ×1
rxjs ×1
spring ×1
web-services ×1