我想一個worker一個長連接的mysql
還有比如我想在worker進程一啟動時就連接數(shù)據(jù)庫或一個其它接口,該在什么地方連接
onstart嗎?onstart是不是gateway進程也會觸發(fā)???那該如何區(qū)分呢?
使用單例,用的時候創(chuàng)建連接即可。
不用在onStart時創(chuàng)建。
在workerman中使用單例模式(在類靜態(tài)成員中保存對象/數(shù)據(jù)),在當前進程生命周期內(nèi)所有請求中都是共享可用的。比如數(shù)據(jù)庫單例,當使用數(shù)據(jù)庫時發(fā)現(xiàn)數(shù)據(jù)庫對象還沒創(chuàng)建,就立即創(chuàng)建一個,然后保存在數(shù)據(jù)庫類的靜態(tài)成員中,下次再次使用數(shù)據(jù)庫對象時,直接使用數(shù)據(jù)庫靜態(tài)成員那個數(shù)據(jù)庫對象即可,這樣當前進程內(nèi)的所有請求就都可以復(fù)用這個數(shù)據(jù)庫對象,也就是真正意義上的長連接,沒有頻繁的數(shù)據(jù)庫連接、權(quán)限驗證、斷開連接等開銷,非常高效。
workerman中自帶mysql類,也是使用的單例模式,只有在第一次 調(diào)用Db::instance(‘db_name’)->query(sql)時才創(chuàng)建一個數(shù)據(jù)庫連接對象,才會去連接數(shù)據(jù)庫。后面再調(diào)用Db::instance(‘db_name’)就直接復(fù)用了第一次創(chuàng)建的數(shù)據(jù)庫對象,不會在創(chuàng)建。