• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • memcache-2.2.4 中的一點小知識

    發表于:2013-10-16來源:IT博客大學習作者:phpor點擊數: 標簽:linux
    在一次抓包的過程中,發現我的PHP在訪問memcache的時候時不時的會多出一個“version”的在一次抓包的過程中,發現我的PHP在訪問memcache的時候時不時的會多出一個“version”的操作,結果就是返回memcached的版本號;疑惑不解,我發誓自己沒有寫這部分代碼的,

      在一次抓包的過程中,發現我的PHP在訪問memcache的時候時不時的會多出一個“version”的操作,結果就是返回memcached的版本號;疑惑不解,我發誓自己沒有寫這部分代碼的,為什么會憑空多出一個“version”操作呢?看看源代碼吧!

      源碼中發現這么一段:

      int mmc_open(mmc_t *mmc, int force_connect, char **error_string, int *errnum TSRMLS_DC) /* {{{ */

      {

      switch (mmc->status) {

      case MMC_STATUS_DISCONNECTED:

      return _mmc_open(mmc, error_string, errnum TSRMLS_CC);

      case MMC_STATUS_CONNECTED:

      return 1;

      case MMC_STATUS_UNKNOWN:

      /* check connection if needed */

      if (force_connect) {

      char *version;

      if ((version = mmc_get_version(mmc TSRMLS_CC)) == NULL && !_mmc_open(mmc, error_string, errnum TSRMLS_CC)) {

      break;

      }

      if (version) {

      efree(version);

      }

      mmc->status = MMC_STATUS_CONNECTED;

      }

      return 1;

      case MMC_STATUS_FAILED:

      if (mmc->retry_interval >= 0 && (long)time(NULL) >= mmc->failed + mmc->retry_interval) {

      if (_mmc_open(mmc, error_string, errnum TSRMLS_CC) /*&& mmc_flush(mmc, 0 TSRMLS_CC) > 0*/) {

      return 1;

      }

      }

      break;

      }

      return 0;

      }

      如果連接狀態為MMC_STATUS_UNKNOWN 就會通過“version”操作來檢查連接的狀態。那么什么情況下連接的狀態會是MMC_STATUS_UNKNOWN 呢?

      參看函數: mmc_find_persistent , 其邏輯大致為:

      1. 如果在hash表中沒有查到該連接,則初始化一個連接句柄,并注冊一個長連接

      2. 如果查到了,發現連接明顯有一些問題,比如根本沒有成功連接,則從hash表中刪除,重新初始化、注冊;

      3. 如果查到了,并且沒有發現明顯的錯誤標識,則將狀態置為MMC_STATUS_UNKNOWN,如此則發送一個“version”命令檢查連接的有效性。

      如此看來,如果長連接被重用,則一定會先有一個version命令的。

      由此也可以看出,長連接關閉被動關閉時,PHP是沒有被通知的,(猜測一下,通常這種情況下,連接是半關閉狀態的)

    原文轉自:http://blogread.cn/it/article/2093

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>