社区首页 >问答首页 >在rpc操作中对mysql的socketstream异步调用

在rpc操作中对mysql的socketstream异步调用
EN

Stack Overflow用户
提问于 2013-04-07 11:32:26
回答 1查看 416关注 0票数 1

首先,我需要告诉你的是,我对nodejs,socketstream,angularjs和JavaScript的奇迹还很陌生。我来自Java背景,这可能解释了我对异步处理的正确方式的无知。

为了玩弄一些东西,我安装了americanyak的ss-angular-demo。我现在的问题是,Rpc似乎是一个同步接口,而我对mysql数据库的调用有一个异步接口。如何在调用Rpc时返回数据库结果?

以下是我到目前为止对socketstream 0.3所做的工作:

在app.js中,我通过将ss.api.add('coolStore',mysqlConn);放在正确的位置(as explained in the socketstream docs),成功地告诉ss允许访问我的mysql数据库连接。我使用mysql npm,因此可以在Rpc中调用mysql

server/rpc/coolRpc.js

代码语言:javascript
代码运行次数:0
复制
exports.actions = function (req, res, ss) {

  // use session middleware
  req.use('session');

  return {
    get: function(threshold){
      var sql = "SELECT cool.id, cool.score, cool.data FROM cool WHERE cool.score > " + threshold;
      if (!ss.arbStore) {
            console.log("connecting to mysql arb data store");
            ss.coolStore = ss.coolStore.connect();
      }

      ss.coolStore.query(sql, function(err, rows, fields) {
            if(err) {
                    console.log("error fetching stuff", err);
            } else {
                    console.log("first row = "+rows[0].id);
            }
      });
      var db_rows = ???
      return res(null, db_rows || []);
    }
  }

如预期的那样,控制台记录我的数据库条目的id。但是,我不知道如何让Rpc的return语句返回查询的行。解决这类问题的正确方法是什么?

谢谢你的帮助。请对我友好一点,因为这也是我关于stackoverflow的第一个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 12:12:38

它不是同步的。当你的结果准备好后,你可以把它们发回去:

代码语言:javascript
代码运行次数:0
复制
exports.actions = function (req, res, ss) {

  // use session middleware
  req.use('session');

  return {
    get: function(threshold){
      ...
      ss.coolStore.query(sql, function(err, rows, fields) {
        res(err, rows || []);
      });
    }
  }
};

您需要确保始终从RPC函数调用res(...),即使在发生错误时也是如此,否则可能会收到悬而未决的请求(客户端代码一直在等待从未生成的响应)。在上面的代码中,错误被转发到客户端,因此可以在那里进行处理。

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

https://stackoverflow.com/questions/15861879

复制
相关文章
Flask中对MySQL的基本操作
在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。 最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 在视图函数中定义模型类 from flask import Flask from flask_sqlalchemy import S
汪凡
2019/03/01
1.3K0
Flask中对MySQL的基本操作
深入剖析通信层和RPC调用的异步化(上)
在将近10年的平台中间件研发历程中,我们的平台和业务经历了从C++到Java,从同步的BIO到非阻塞的NIO,以及纯异步的事件驱动I/O(AIO)。服务器也从Web容器逐步迁移到了内部更轻量、更高性能的微容器。服务之间的RPC调用从最初的同步阻塞式调用逐步升级到了全栈异步非阻塞调用。
全栈程序员站长
2022/06/29
1.1K0
深入剖析通信层和RPC调用的异步化(上)
在BS中,为什么要用异步操作
VFP,Javascript语言的执行环境是"单线程"。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。 这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。 为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步和异步。 "同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数,前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。 "异步模式"非常重要。在浏览器端,耗时很长的操作都应该异步执行,避免浏览器失去响应,最好的例子就是Ajax操作。在服务器端,"异步模式"甚至是唯一的模式,因为执行环境是单线程的,如果允许同步执行所有http请求,服务器性能会急剧下降,很快就会失去响应。
加菲猫的VFP
2021/08/16
7360
aiomysql异步操作mysql
aiomysql是一个从asyncio(PEP-3156/tulip)框架访问MySQL数据库的库。它依赖并重用PyMySQL的大部分部分。aiomysql试图成为一个很棒的aiopg库,并保留相同的api、外观和感觉。
py3study
2020/05/09
6.4K0
Dart中的异步操作
在前面的文章中我们很多次提到了Future这个东西,这个单词翻译过来的意思是‘未来’的意思。在flutter中它表示一个未来某些时候返回数据的一个对象。
flyou
2019/08/06
1.6K0
Python 对MySQL的操作
2.x版本的Python有MySQLdb安装很恶心,需要装mysql-connector 的头文件,还有visual studio 2010版本以上。3.x更是没了这玩意,他的fork版本的MySQLClient 安装更蛋疼,各种报错。只能去某个美国高校弄编译好的包。(当然这些都是在Windows下的)
用户2353021
2020/05/09
7910
python对mysql的操作
 http://sourceforge.net/projects/mysql-python
py3study
2020/01/13
1.5K0
Spring Boot 中的异步调用[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157342.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/08
9540
RPC 调用和 HTTP 调用的区别
在说RPC和HTTP的区别之前,我觉的有必要了解一下OSI的七层网络结构模型(虽然实际应用中基本上都是五层),它可以分为以下几层:(从上到下)
用户4283147
2022/10/27
9150
RPC 调用和 HTTP 调用的区别
如何使用 OpenTracing 在 TCM 中实现异步消息调用跟踪
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher 管理委员,Istio 项目贡献者,热衷于开源、网络和云计算。目前主要从事服务网格的开源和研发工作。 背景 在上一篇文章《Istio 最佳实践系列:如何实现方法级调用跟踪》中,我们通过一个网上商店的示例程序学习了如何使用 OpenTracing 在 Istio 服务网格中传递分布式调用跟踪的上下文,以及如何将方法级的调用信息加入到 Istio/Envoy 生成的调用链中。采用 OpenTracing 可以减少应用代码中传递HT
腾讯云原生
2021/04/19
2.6K0
rpc系列3-支持异步调用,提供future、callback的能力。
谈到异步,我们首先想到了Java提供的Future机制,Future代表一个异步计算结果,提交一个任务后会立刻返回,通过future.get()方法来获取计算结果,该方法会阻塞当前线程,直到结果返回。使用形式如下:
topgunviper
2022/05/12
5450
在springboot中对kafka进行读写操作
只需要在dependencies中增加 spring-kafka的配置即可。完整效果如下:
冬天里的懒猫
2020/08/03
3.1K0
Spring中的异步请求、异步调用及demo测试
背景:做项目过程中,一些耗时长的任务可能需要在后台线程池中运行;典型的如发送邮件等,由于需要调用外部的接口来进行实际的发送操作,如果客户端在提交发送请求后一直等待服务器端发送成功后再返回,就会长时间的占用服务器的一个连接;当这类请求过多时,服务器连接数会不够用,新的连接请求可能无法得到满足,从而导致客户端连接失败。因此如果 request(/url) 经过dispatcherServlet 找到对应的 controller中请求方法后,先去释放request 线程资源,通过异步调用的方式去处理contorller方法 中接下来要执行代码,当异步线程 执行完后,controller 方法返回处理的值,这样就不会因为 大量请求,服务器没法处理连接问题。
猎户星座1
2020/07/20
2.7K0
Qt 6中的异步操作
❝从Qt官网看到的一篇关于Qt 6的文章,分享给大家。❞   我们先看看Qt 6版本以前「从网络中加载图片的一般操作步骤」。 发出网络请求并等待,直到收到所有图像数据。 根据原始数据创建图像源。 处理图像。 显示图像。   具体的函数操作: QByteArray download(const QUrl &url); QImage createImage(const QByteArray &data); QImage processImage(const QImage &image); void show(c
Qt君
2023/03/17
1.2K0
Qt 6中的异步操作
RPC异步化原理
深入RPC,更好使用RPC,须从RPC框架整体性能考虑问题。得知道如何提升RPC框架的性能、稳定性、安全性、吞吐量及如何在分布式下快速定位问题。RPC框架如何压榨单机吞吐量?
JavaEdge
2023/02/28
1.1K0
RPC异步化原理
Docker 中,对 mysql 配置文件的修改操作
背景 前面,我进行了 Replication 以及 PXC 集群的配置操作 但是发现,实际工作中 一定会对 mysql 的配置参数进行修改的 比如:max_connections 但是,你会发现,docker 因为是虚拟环境的原因 我们不能直接在 Linux 中进行配置文件的查找 如果,有时间 强烈建议,学习一下 Docker 操作技巧 毕竟我也是接触中遇到问题才会找途径解决 在此,记录一下操作过程,希望对你有所帮助 … 操作步骤 此处,以修改参数 "max_connectio
泥豆芽儿 MT
2021/09/06
6.4K0
Python对MySQL操作
说明:pymysql是纯用Python操作MySQL的模块,其使用方法和MySQLdb几乎相同
星哥玩云
2022/09/08
9320
Python对MySQL操作
时钟轮在 RPC 中的应用
在讲解时钟轮之前,我们先来聊聊定时任务。相信你在开发的过程中,很多场景都会使用到定时任务,在 RPC 框架中也有很多地方会使用到它。就以调用端请求超时的处理逻辑为例,下面我们看一下 RPC 框架是如果处理超时请求的。
码猿技术专栏
2023/05/01
3750
时钟轮在 RPC 中的应用
mysql在ubuntu中的操作笔记(详)
1.安装mysql客户端流程:   -  登录navicat官网下载   -  将压缩包拷贝ubuntu中进行解压,解压命令:tar zxvf navicat.tar.gz   -  进入解压目录,运
汪凡
2018/05/29
1.1K0
点击加载更多

相似问题

在GWT中,RPC调用是同步的还是异步的

12

如何使RPC调用在nameko中异步?

24

GWT:用异步RPC替换阻塞调用

21

如何使用RabbitMq进行异步RPC调用

16

在MVC中对操作使用异步

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文