首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Appengine和rx?

Google Appengine和rx?
EN

Stack Overflow用户
提问于 2014-05-16 17:43:10
回答 2查看 1.3K关注 0票数 5

rxJava库与Google兼容吗?如果有,是否有任何限制?我发现的唯一信息就是提到了grepcode上的“部分支持”。http://grepcode.com/snapshot/repo1.maven.org/maven2/com.netflix.rxjava/rxjava-core/0.9.0

什么是不支持的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-18 07:11:43

问题在于Google:sandbox中Java的局限性

RxJava在Scheduler实现中使用了JavaThreadExecutor。因此,涉及到一些并发Scheduler的代码不能在Google中运行。

如果您想在Google中使用Scheduler,您需要自己实现一个特殊的Scheduler。此外,一些操作符在默认情况下可能使用Scheduler,例如delay默认使用Schedulers.computation()。记住使用他们的Scheduler重载方法。

票数 2
EN

Stack Overflow用户

发布于 2015-04-27 18:22:41

您应该创建一个RxJavaSchedulersHook的子程序,并使用使用com.google.appengine.api.ThreadManager的调度程序覆盖它的方法:我已经这样做了:

代码语言:javascript
复制
public class MyThreadSchedulersHook extends RxJavaSchedulersHook {

private final Executor executor = new ScheduledThreadPoolExecutor(10, ThreadManager.backgroundThreadFactory());

@Override
public Scheduler getComputationScheduler() {
    return Schedulers.from(executor);
}

@Override
public Scheduler getIOScheduler() {
    return Schedulers.from(executor);
}

@Override
public Scheduler getNewThreadScheduler() {
    return Schedulers.from(executor);
}
}

那你应该注册这个钩子。最好在ServletContextListener实现中这样做:

代码语言:javascript
复制
public class ContextListener implements ServletContextListener {

@Override
public void contextInitialized(final ServletContextEvent servletContextEvent) {
    RxJavaPlugins.getInstance().registerSchedulersHook(new RxMainThreadSchedulersHook());
}

@Override
public void contextDestroyed(final ServletContextEvent servletContextEvent) {
    // App Engine does not currently invoke this method.
}
}

对我来说很管用。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23701504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档