首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Play框架中运行异步/非阻塞MySQL查询?

如何在Play框架中运行异步/非阻塞MySQL查询?
EN

Stack Overflow用户
提问于 2011-12-26 11:19:58
回答 2查看 5.6K关注 0票数 6

才刚开始玩。文档讨论了如何异步运行Play。

但是如何在异步运行Play时运行MySQL查询呢?正常的MySQL查询是阻塞的,对吗?所以这是行不通的。

Node.js有自己的非阻塞MySQL客户端就是为了这个目的,但是我找不到任何类似的客户端。

如何在异步播放应用程序中运行MySQL查询?

EN

回答 2

Stack Overflow用户

发布于 2011-12-26 15:36:56

播放作业在单独的线程中执行,并释放主http线程。然后,当Job (包装在Promise对象中)在完成后返回时,主http线程从它停止的位置启动。

因此,主http线程不会被阻塞,并可用于处理其他传入的http请求。

票数 2
EN

Stack Overflow用户

发布于 2012-05-01 04:12:31

通常,对DB的SQL调用的执行通常是阻塞的,并按顺序执行。Play对异步执行有很好的支持,可以提高你的应用程序的性能。

Play 2.0的工作代码示例

代码语言:javascript
运行
复制
public static Result slow() {
    Logger.debug("slow started");

    // Start execution
    Promise<DataObject> userObject1 = SlowQuery.getUser(440);
    Promise<DataObject> userObject2 = SlowQuery.getCategory(420);
    // ... here execution is already in progress ...

    // Map to Promise Objects
    Promise<DataObject> res1 = userObject1.map(new Function<DataObject, DataObject>() {
        public DataObject apply(DataObject res) {
            Logger.debug("Got result (userObject1): " + res.toString());
            return res;
        }
    });

    Promise<DataObject> res2 = userObject2.map(new Function<DataObject, DataObject>() {
        public DataObject apply(DataObject res) {
            Logger.debug("Got result (userObject2): " + res.toString());
            return res;
        }
    });

    // here we wait for completion - this blocks
    userObject1.getWrappedPromise().await();
    userObject2.getWrappedPromise().await();

    // the result is available
    Logger.debug(res1.get().toString());
    Logger.debug(res2.get().toString());

    Logger.debug("slow finished");
    return ok("done");
}

使用社区维基功能可以随意改进--我相信有些部分可以缩短。

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

https://stackoverflow.com/questions/8632714

复制
相关文章

相似问题

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