做後端開發免不了要和一些儲存伺服器
,訊息伺服器
等等 打交道。
大家都知道和這些使用 tcp連線 的服務傳遞資料的都必須要開啟 乙個連線-connection
例如我們開啟乙個資料庫並執行一段 sql, 通常都是
這個方式看上去似乎沒有什麼不對的。connection = open "mysql:"
(開啟資料庫,並取得持有連線的控制代碼)
data = connection.exec "select * from table1"
(執行 sql 並獲取資料)
connection.close()
顯式的關閉連線
但是對於併發量稍大一些的站點來說。乙個單元批次的操作就需要開啟並關閉一次連線。。。
這顯然是不能接受的。
建立乙個tcp連線需要三次握手。而且還需要為物件分配系統資源和記憶體空間。所以建立乙個tcp連線可以說是昂貴的。
回到剛才的話題。這樣平凡的開啟關閉連線不僅對增加客戶端io的壓力,最重要的是大大增加了 tcp 伺服器的壓力(mysql, redis)。
那我們再嘗試另外一種方式,那就是不關閉連線,一直使用這個連線呢。答案是: 可以。這種方式 被叫做長連線
。
那這樣的話,也有乙個問題。因為一段時間內乙個連線只能做一件事情。那麼在併發的情況下這顯然會阻塞整個系統。
那我們能不能嘗試建立多個連線,然後當呼叫的時候,將沒有被使用的連線拿出來使用,當使用完畢之後,將連線放回去,以供其他呼叫者使用的方式的呢?
答案是有的:那就是我們要說的連線池
。當然乙個健全的連線池並不僅僅完成以上我所說的功能。
連線池
可謂是我們管理連線的管家
說到這裡好像還是沒有說到要點。在node中我們應該怎麼呢?
我們可以使用node-pool
這個模組 github
1. 安裝
npm install generic-pool
2. 建立乙個連線池
// 建立乙個 mysql 連線池
var poolmodule = require('generic-pool');
var pool = poolmodule.pool(,
// 釋放乙個連線的 handler
destroy : function(client) ,
// 連線池中最大連線數量
max : 10,
// 連線池中最少連線數量
min : 2,
// 如果乙個執行緒3秒鐘內沒有被使用過的話。那麼就釋放
idletimeoutmillis : 30000,
// 如果 設定為 true 的話,就是使用 console.log 列印入職,當然你可以傳遞乙個 function 最為作為日誌記錄handler
log : true
});
3. 從連線池中獲得鏈結並使用
// 預設無任務優先順序, 但是與高優先順序一樣,在競爭佇列的前列
pool.acquire(function(err, client) );
// 高優先順序獲得鏈結, 在競爭佇列的前列
pool.acquire(function(err, client) , 0);
// 中等優先順序獲得鏈結
pool.acquire(function(err, client) , 1);
// pool.acquire(handler, priority) 方法接受連個引數
// handler: 獲取連線的回掉函式
// priority: 獲取到鏈結的競爭優先順序
// pool.release(client) 方法會將鏈結放回到連線池當中,當獲得的鏈結沒有release的話。將會導致該鏈結被一直占用
【生產級別nodejs開發實踐-強壯的node程序容器pm2】- 敬請期待
注:儲存伺服器
: (資料庫 mysql ..., 快取 memcached, redis ...)
訊息伺服器
: (rabbitmq,activemq ...)
SQL生產使用實踐
1.應用場景 查詢近三年的投產數量,如何得到當前月的總數為前幾個月數的加和?思路 使用自連線,date add 函式,date parse 函式。select a.online year,a.online month,sum b.success as success from select subs...
Svn使用實踐 android開發
a svn 分為主幹和分支。主幹用途 常規的 提交了,主要是新功能的提交。分支 分為發布分支,實驗性分支。發布分支用途 乙個版本到開發後期,新需求已不能提交到發布分支上。只能用於修復bug。而敏捷開發中,新功能的開發和bug 的修復通常是同期進行的。b 提交細則 乙個版本的開發主要有以下過程 一 新...
使用MongoDB開發實踐體會
年前在專案中使用了nosql的代表之一 mongodb,微博上總結了一些心得,在這裡和各位分享一下。開發中用mongodb的爽快之處 mongodb是乙個非常適合php開發的 nosql 資料庫,尤其支援高併發和schema free 自由結構 特性,使得php開發變得更靈活,更高效。大家都來試試吧...