但是nodejs又是单线程的,它能不能同时发送多个请求到mysql服务器上呢?
这里要理解nodejs的运作,虽然nodejs是一个主线程,但是它调用的IO指令等是通过另外的线程去做的,IO指令完成后就给主线程一个小任务片,也就是回调函数了。
这里有个很关键的点就是,nodejs主线程一个,但是IO线程会有多个。
因此如果用nodejs + mysql只用单个连接的话那么就利用不到mysql能同时服务多个查询的优势了。应该使用类似下图的运作方式,nodejs 使用多个连接来连接mysql。多连接是需要连接池的,有连接池就避免了每次连接都要去创建销毁的消耗了。
项目用到了node来做后台服务端,自然避免不了要用redis、sql等等。在mysql中挑了promise-mysql来做,其中的pool连接池用着挺方便的。
但最近的业务需要用上事务,官方文档貌似没有特别的说明。
源码的pool有个getConnection的方法,同时return new PoolConnection
再看看这个PoolConnection,调用了Connection.call(this, null, _connection),说明具有connection的所有功能
便可追进Connection里面看,有beginTransaction,query,commit,rollback,足够我们使用,另外PoolConnection里面还有release方法,保证了pool连接池的不用destroy掉这个connection。
不说废话,直接贴码
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)