Tag:

Nodejs上的mysql池连接在哪里结束?

我在Nodejs上使用MySQL。 我使用mysql pool创build连接: Var mysqk = require ('mysql'); Var pool = mysql.createPool ({my configs}); 我的问题是:在应用程序中的哪里将使用文档中报告的pool.end() ? 例如:在我的www文件中,我创build了一个代码来释放其他内容,正如我在代码中指出的那样。 我应该使用pool.end()吗? var app = require('../app'); var debug = require('debug')('cancela:server'); var http = require('http'); var port = normalizePort(process.env.PORT || '4000'); app.set('port', port); var server = http.createServer(app); // my app codes… .. . . process.once('SIGTERM', end); process.once('SIGINT', end); function end() […]

在node.js + mysql池中释放之后的Mysql连接

我不明白为什么我可以在发布后连接到Mysql。 有没有办法来检查Mysql的状态? 谢谢您的帮助 ! var mysqlConfig = { host : "abcd", port : "3306", user : "root", password : "root", database : "test" }; var pool = mysql.createPool(mysqlConfig); pool.getConnection(function(err, conn) { // release pool conn.release(); // After release, Why could I connect to Mysql ???? conn.query('SELECT * FROM user_info WHERE user_id = ?', [id], function(err, […]

Node.js单线程VS Tranditonal webserver线程池

我是node.js的新手 目前我正在阅读由Basarat Ali Syed撰写的 “ Beignning Node.js ”。 以下是摘录自传统Web服务器线程池的缺点: 大多数Web服务器使用线程池这种方法几年前,许多继续使用今天。 但是,这种方法不是没有缺点。 线程之间的内存浪费了。 另外,操作系统需要在线程之间进行上下文切换(即使它们处于空闲状态),这会导致浪费CPU资源。 我不太明白为什么在线程池内的线程之间有上下文切换。 据我所知,一个线程将在任务期间持续。 一旦任务完成,线程将自由地接收下一个任务。 所以我的Q1 :为什么需要上下文切换? 线程之间的上下文切换何时发生? 我的Q2 :为什么node.js不使用多个线程来处理事件队列中的事件? 这不是更有效率,并减less事件的排队时间?

非阻塞在Node.js循环和池?

我开始玩node.js,我有一个应用程序,它基本上遍历了几十个对象,并为它们执行一些各种asynchronoushttp请求,并使用从http请求返回的各种数据填充对象。问题更多地涉及Node.js的最佳实践,非阻塞操作,可能与池化有关。 原谅我如果我使用了错误的术语,因为我是新手,请不要犹豫,纠正我。 所以下面是一个简单的总结,我有一个循环的代码循环数千 //Loop briefly summarized for (var i = 0; i < arrayOfObjects.length; i++) { do_something(arrayOfObjects[i], function (error, result){ if(err){ //various log }else{ console.log(result); } }); } //dosomething briefly summarized function do_something (Object, callback){ http.request(url1, function(err, result){ if(!err){ insert_in_db(result.value1, function (error,result){ //Another http request with asynchronous }); }else{ //various logging error } }); http.request(url2, […]

与同一连接的节点的mysql池连接获取并释放增加每个调用

我有一个节点应用程序连接到MySQL使用mysqljs / mysql最近我已经意识到这一点通过debugging:(服务器日志) info: Url: /loginWeb info: Method: POST info: Connection 1098089 acquired info: Connection 1098089 released POST /loginWeb 200 214.618 ms – 186 info: Url: /loginWeb info: Method: POST info: Connection 1098089 acquired info: Connection 1098089 acquired info: Connection 1098089 released info: Connection 1098089 released POST /loginWeb 200 76.776 ms – 186 info: Url: […]

事件驱动和基于线程的服务器系统有什么区别?

Node.js是一个事件驱动的I / O,它是一个单线程的服务器,对callback起作用,永远不会阻塞主线程。 但是它是如何处理非阻塞I / O的呢? 如果它确实容易pipe理,为什么不基于线程的系统pipe理呢? 不像其他线程(在单个事件驱动线程之后)像基于线程的工作? 如果其他线程表示工作者(在事件驱动线程后面)忙碌,那么它仍然可以不受阻塞地处理工作? 基于线程的模型将任务分配给线程,如果没有空闲线程,则阻止新任务。 如果一个线程可以像处理每个I / O而没有阻塞的事件驱动的单线程一样处理多个任务,那么为什么基于线程的系统在忙线程中不使用这种策略来阻塞I / O。 我想知道事件驱动和基于线程的服务器系统有什么区别( 优点/缺点 )。

Node.js和MongoDB,重用DB对象

我对Node.js和MongoDB都是新手,但是我已经设法将SO和mongo的文档放在一起。 Mongo文档给出了例子: // Retrieve var MongoClient = require('mongodb').MongoClient; // Connect to the db MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) { if(!err) { console.log("We are connected"); } }); 这看起来很好,如果我只需要在一个地方使用一个function的数据库。 在SO上search和阅读已经表明,我不应该每次都打开一个新的连接,而是使用一个池并重用我第一次获得的数据库对象。 这个答案很丰富,但我不知道如何获得DB对象,然后如何重用它。 假设我的App.js中有上面的Node.js代码,然后我有不同的路由需要在db上运行不同的操作: app.post('/employee', function(req, res){ //Put req.name in database }); app.post('/car', function(req, res){ //Put req.car in database }); 我将如何将这两个片段放在一起有用? 我在Node.js中发现了一个类似的问题, 重用了MongoDB引用 ,但是从这个( http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html )的外观来看,它看起来像我应该使用MongoClient而不是db()。 而且我不确定它是否解决了我的问题