‘壹’ nginx和php-fpm 是使用 tcp socket 还是 unix socket
如果是在同一台服务器上运行的nginx和php-fpm,并发量不超过1000,选择unix socket,因为是本地,可以避免一些检查操作(路由等),因此更快,更轻。
如果我面临高并发业务,我会选择使用更可靠的tcp socket,以负载均衡、内核优化等运维手段维持效率。
‘贰’ php可不可以socket通信长连接,不断开,然后实现多次通讯
理论上是可以的,使用PHP提供的socket相关API,主要问题是脚本执行时间。
PHP运行模式分为非命令行模式及命令行模式。
非命令行模式一般是用于B/S交互,max_execution_time默认为非零,也就是限制脚本执行时间。即使你设置max_execution_time为0也面临用户浏览器请求的超时问题。
命令行模式下set_limit_time默认为0,做为本地脚本执行,所以没有上述的问题。
PHP SOCKET相关文档:
http://cn2.php.net/manual/zh/book.sockets.php
‘叁’ php涓轰粈涔堜笉阃傚悎socket
浣滀负涓钖嶉潪搴曞眰绋嫔簭锻桡纴瑕佹兂娣卞叆浜呜Вsocket镄勫唴閮ㄥ疄鐜版満鍒舵槸寰埚汹闅剧殑锛屾垜浠鍙闇鏄庣槠socket鏄涓濂楁搷浣灭郴缁熷皝瑁呭ソ镄勫疄鐜拌繘绋嬮氢俊镄勫嚱鏁帮纴浼氩垱寤哄拰璋幂敤灏卞熶简銆
PHP镄勮瑷鐗规у拰镊韬瀹氢綅鍐冲畾浜嗗畠鍙阃傚悎锅歴ocket瀹㈡埛绔锛岃屼笉阃傚悎锅歴ocket链嶅姟鍣ㄧ銆
锲犱负socket涓昏侀溃钖戝簳灞傚拰缃戠粶链嶅姟寮鍙戯纴涓鑸链嶅姟鍣ㄧ閮芥槸鐢 C 鎴 Java 绛夎瑷瀹炵幇锛岃繖镙疯兘镟村ソ鍦版搷浣滃簳灞傦纴瀵圭绣缁沧湇锷″紑鍙戜腑阆囧埌镄勯梾棰桡纸濡傚苟鍙戙侀樆濉炵瓑锛変篃链夋垚镡熷畬锽勭殑瑙e喅鏂规堬纴钥孭HP鏄剧劧涓嶉傚悎杩欑嶅簲鐢ㄥ満鏅銆 锛堟帹钻愬︿範锛歅HP瑙嗛戞暀绋嬶级
瀹为檯涓婏纴PHP镎崭綔MySQL鏁版嵁搴扑篃鏄阃氲繃socket杩涜岀殑锛岃繖姝f槸鐢变簬socket灞忚斀浜嗗簳灞傜殑鍗忚锛屼娇寰楃绣缁沧湇锷′箣闂寸殑浜掕仈浜挜氩彉寰楃亩鍗曘
闄や简浼犵粺镄勬湇锷″櫒绔璇瑷瀹炵幇镄剆ocket澶栵纴闅忕潃HTML5镄勬祦琛岋纴娴忚埚櫒瀹㈡埛绔瀹炵幇镄刉ebSocket涔熼愭笎鍏磋捣锛屽逛簬杩欎竴镣瑰煎缑鍏虫敞锛孎lashSocket涔熸槸涓涓涓嶉敊镄勮В鍐虫柟妗堛
瑕佸湪瀹㈡埛绔镎崭綔socket锛屽彲浣跨敤fsockopen銆乻ocket_create 鎴 stream_socket_client 绛夊嚱鏁板疄鐜帮纴濡傛灉鏄疨HP5锛屾帹钻愪娇鐢╯tream_socket_client銆
socket浜や簰搴旂敤瀹炰緥锛氢娇鐢╯ocket鎻愪氦琛ㄥ崟
鏂板缓涓涓 test.php 鏂囦欢锛屽悜 http://demo.com/index.php?id=1 鎻愪氦琛ㄥ崟鏁版嵁锛屼唬镰佸备笅锛
<?php
$data = array('comment'=>'this is a robot comment');
$data = http_build_query($data);
$out = "POST http://demo.com/index.php?id=1 HTTP/1.1
"; // 阃氲繃POST鏂瑰纺鍙戦佹暟鎹
$out .= "Host: demo.com
";
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8
";
$out .= "Content-length: ".strlen($data)."
";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."
";
$out .= "Connection: close"."
"."
"; // 娉ㄦ剰锛氭ゅ勬湁涓や釜
$out .= $data."
"; // 姝f枃鏁版嵁
$fp = fsockopen("demo.com", 80, $errno, $errstr, 30); // 鍒涘缓socket瀹㈡埛绔杩炴帴
// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30); 鎺ㄨ崘杩欑嶅啓娉
fwrite($fp, $out); // 钖戞湇锷″櫒鍙戦佹暟鎹
while (!feof($fp)) {
echo fgets($fp, 1280); // 璇诲彇链嶅姟鍣ㄥ搷搴旂殑鏁版嵁
}
fclose($fp); // 鍏抽棴socket杩炴帴
?>闇瑕佹敞镒忎互涓嫔嚑镣癸细
fsockopen镄勭涓涓鍙傛暟锛屼篃鍙浠ヤ娇鐢↖P鍦板潃锛屼笉瑕佸甫 http:// 瀛楃︿覆锛岄櫎闱炰娇鐢⊿SL绛
璇锋眰澶达纸headers锛変笉涓瀹氲佸甫涓婃墍链夌殑澶村烟锛屼竴鑸鍙闇甯︿笂鍑犱釜镙稿绩镄删eader鍗冲彲
鍦ㄦ渶钖庝竴涓猦eader澶勶纴鍗 Connection 钖庢湁涓や釜鎹㈣
娉ㄦ剰缂栫爜闂棰