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

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

thibaultfu

在Walker類中有如下代碼:

 // 嘗試打開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訪問和傳入的$this->_mainSocket的值是一樣的,為何還需要再調(diào)用一次?

8099 3 0
3個回答

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同時能操作普通stream資源,workerman使用了php內(nèi)置的stream_socket。

stream_socket缺點(diǎn)
stream_socket與sockets相比有個缺點(diǎn),無法精確設(shè)置socket選項(xiàng)。當(dāng)需要設(shè)置stream_socket選項(xiàng)時,
可以通過http://php.net/manual/en/function.socket-import-stream.php將stream_socket轉(zhuǎn)換成擴(kuò)展的sockets,然后就可以通過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')是否存在,不存在說明擴(kuò)展沒裝或者版本不支持,所以不能調(diào)用。

  • 暫無評論
顆粒Cc.

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

感謝boss,我也想了解下哈

walkor 打賞

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

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

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??