mysql pconnect长连接是这样理解吗?
黄舟
黄舟 2017-04-17 11:31:47
0
2
854

MySQL pconnect长久连接,是这样理解吗?
有三个用户A、B、C正在访问网站。如果开启了pconnect长连接的,那么:

第一种理解

A用户请求/index.php,/index.php连接mysql,返回到客户端浏览器。
B用户再去请求/index.php,那么是不是就直接用A用户连接到数据库的那个连接了
同理C用户也是这样用的同一个连接

第二种理解

A用户请求/index.php,暂停10分钟未有第二次请求
10分钟之后,再次请求/index.php,那么php使用数据库连接还是原先的那个。
且不管A用户之后请求该网站的任何其他PHP,PHP连接数据库都是用的一开始那个连接?
那时间是永久的?可以支撑多久?

同一时刻,B用户去请求/index.php,他重新开一个长久连接,与A用户开启的那个是不一样的
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(2)
大家讲道理

看php在web伺服器上寄生狀態是什麼樣的如果是nginx+phpcgi的方式那麼長連接是由每個cgi程式自己保持的,和用戶請求頁面的地址無關,只要是資料庫的ip和端口使用者名稱不變則不會斷開連接,即使使用者要求一次頁面之後關閉頁面連接也會保持一定時間,有點像phpcgi 自己保持了一個連接池,可以在mysql 中用show processlist 查看。假如是apache的方式可能pconnect 和connect 是一樣的。因為apache+module的方式 php的解析器等於每次都要重新初始化。

左手右手慢动作

PHP 的不是很清楚,Python 對於 Mysql 資料庫操作我做過實驗。

  • 第一種方案是单例连接web 服務初始化的時候,例如啟動 Flasktornado,進行資料庫 Mysql 的連接,這個連接有超時的設置,一旦超時了,會自動重新連接。所有請求都共用這個連線進行資料庫查詢操作,簡單來說就是這個連線時一個單例。使用的資料庫驅動封裝為 torndb
  • 第二種方案就是使用数据库连接池,服務初始化的時候,啟動若干個連接,扔進資料庫連接池,然後請求就從連接池中取出連接進行查詢,查詢完畢之後,釋放連接回到連接池。可參考的程式碼

測試了並發請求效率,第一種方案處理請求能力更強,Mysql 佔用資源更小。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板