国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

    Walkerman 源代碼中關(guān)于socket_import_stream疑問(wèn)

    thibaultfu

    在Walker類中有如下代碼:

     // 嘗試打開(kāi)tcp的keepalive,關(guān)閉TCP Nagle算法
     if(function_exists('socket_import_stream'))
     {
         $socket   = socket_import_stream($this->_mainSocket );
         @socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
         @socket_set_option($socket, SOL_SOCKET, TCP_NODELAY, 1);
     }

    為何需要在socket_import_stream存在的情況下,設(shè)置SO_KEEPALIVE和TCP_NODELAY,不存在就不需要調(diào)用么?

    另外socket_import_stream訪問(wèn)和傳入的$this->_mainSocket的值是一樣的,為何還需要再調(diào)用一次?

    8372 3 0
    3個(gè)回答

    walkor 打賞

    php提供兩種socket:
    php提供了兩種類型的socket,http://php.net/manual/en/book.stream.phphttp://php.net/manual/en/book.sockets.php,二者api不兼容。
    stream_socket是php內(nèi)置的,可以直接使用,并且api和stream 的api通用(可以調(diào)用fread fwrite...)。
    sockets需要php安裝sockets擴(kuò)展才能使用。

    workerman使用stream_socket
    為了不依賴擴(kuò)展加上能讓workerman的event-loop同時(shí)能操作普通stream資源,workerman使用了php內(nèi)置的stream_socket。

    stream_socket缺點(diǎn)
    stream_socket與sockets相比有個(gè)缺點(diǎn),無(wú)法精確設(shè)置socket選項(xiàng)。當(dāng)需要設(shè)置stream_socket選項(xiàng)時(shí),
    可以通過(guò)http://php.net/manual/en/function.socket-import-stream.php將stream_socket轉(zhuǎn)換成擴(kuò)展的sockets,然后就可以通過(guò)http://php.net/manual/en/function.socket-set-option.php設(shè)置stream_socket的socket選項(xiàng)了。

    為何判斷socket_import_stream函數(shù)是否存在?
    由于socket_import_stream屬于sockets擴(kuò)展提供的api,并且php>=5.4才支持,所以要判斷下function_exists('socket_import_stream')是否存在,不存在說(shuō)明擴(kuò)展沒(méi)裝或者版本不支持,所以不能調(diào)用。

    • 暫無(wú)評(píng)論
    顆粒Cc.

    他是不是想問(wèn)如果php5.3及以下版本或者沒(méi)有安裝sockets擴(kuò)展的話,就無(wú)法設(shè)置keep_alive,那么后續(xù)會(huì)代碼或者業(yè)務(wù)照成什么樣的影響嗎?

    感謝boss,我也想了解下哈

    walkor 打賞

    沒(méi)有多大影響,keep-alive是tcp底層的心跳機(jī)制,靈敏度很差,用不用差別不大。

    心跳在應(yīng)用層實(shí)現(xiàn)比較好,客戶端定時(shí)發(fā)個(gè)空數(shù)據(jù)給服務(wù)端就可以了。

    • 暫無(wú)評(píng)論
    年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
    ??