标签: polling

使用 Java (Spring) 从数据库安排任务的最佳方法

我正在寻找框架来安排数据库中填充的一组任务

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 请求,因此必须池化请求以避免出现大量任务开始并行执行的情况。

我正在使用弹簧靴。

这里的最佳实践是什么?

java spring scheduled-tasks polling

3
推荐指数
1
解决办法
1万
查看次数

API轮询和超时

我有一个轮询用例,其中:

  1. 我想调用一个 API,它根据业务逻辑立即(1.5-2 秒)返回数字(1-10)或错误(API 中的网络问题/异常等)。
  2. 如果 API 返回错误(API 中的网络问题/异常等),那么我想取消订阅轮询并显示错误。
  3. 如果 API 返回成功,我想检查返回值并取消订阅(如果返回值为 5)或继续轮询。
  4. 我想每 5 秒调用一次 API。
  5. 我想将轮询的最长时间(超时/阈值)保持为 3 分钟。如果我在这 3 分钟内没有得到所需的响应(数字 5),则轮询应该会出错。

这就是我目前的实现方式:

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)

但是,上述实现并没有超时。

需要做什么才能让它超时并且我能够实现所有提到的用例?

polling reactive-programming observable rxjs angular

3
推荐指数
1
解决办法
1720
查看次数

有没有办法通过浏览器使用POST请求?

假设您有一个可以在每次动作发送时发送POST请求的应用程序.它允许订阅快速,轻松地添加/删除.

假设该站点是Stackoverflow,它可以在每次询问新问题时发送POST通知.有没有办法在浏览器中使用这样的通知?

我想象一个案例,当你在页面上花费> 5分钟时,如果自上次刷新页面以来它已经更新,你会开始收到通知.我知道如何通过长轮询来实现这一点,但我想知道是否有任何方法可以从浏览器挂钩这些服务器到客户端的POST请求(相对于重复的GET客户端到服务器请求)并将数据推送到相反.

javascript browser notifications alerts polling

2
推荐指数
1
解决办法
95
查看次数

Rails最佳实践:后台进程/线程?

我来自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应用程序运行时方便地运行会很好.

ruby multithreading ruby-on-rails polling

2
推荐指数
1
解决办法
4097
查看次数

如何在backbone.js中进行轮询?

嗨,我正在使用backbone.js在paly2.0框架应用程序(使用java)上工作.在我的应用程序中,我需要定期从数据库中获取表数据(对于显示即将发生的事件列表的用例以及是否应该从列表中删除旧事件).我正在显示数据,但是问题是定期访问数据库.为此我尝试使用backbone.js轮询概念按照这些链接使用Backbone.js轮询集合,http://kilon.org/blog/2012/02/backbone-poller/ .But他们没有从db中查询最新的集合.请建议我如何实现这个或任何其他选择?谢谢你.

polling poller backbone.js play2-mini

2
推荐指数
1
解决办法
3662
查看次数

如何在非活动的iframe中停止javascript ajax请求?

我制作了网站,其中各种其他网页都是内置为"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)

我怎样才能做到这一点?你有什么想法?

提前致谢.

javascript ajax iframe jquery polling

2
推荐指数
1
解决办法
1230
查看次数

Javascript webservice轮询

我有以下代码,每隔5秒调用一次web服务.此webs服务检查列表中是否有任何内容.

setTimeout(function () {
  _getListItems();
}, 5000);
Run Code Online (Sandbox Code Playgroud)

但是,我不是每隔5秒检查一次,而是想在页面加载时检查它,之后每分钟检查一次.如果列表中找到了某些内容,请每隔5秒开始调用一次.谁能帮我这个?

javascript web-services polling

2
推荐指数
1
解决办法
1031
查看次数

使用Rx为webservice调用创建轮询请求

在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)

c# recursion polling reactive-programming system.reactive

2
推荐指数
1
解决办法
464
查看次数

使用RxAndroid进行智能轮询

我想要实现的目标:我希望每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实现 - …

polling rx-java rx-android

2
推荐指数
1
解决办法
927
查看次数

处理后的Spring集成移动文件

处理文件后如何在spring集成处理后移动文件..?我已经按照 http://xpadro.blogspot.com/2016/07/spring-integration-polling-file.html 来实现文件轮询,但我需要添加onSuccess和OnError跨国事件(没有XML配置)

polling spring-integration

2
推荐指数
1
解决办法
2013
查看次数