国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP中Socket連接及讀寫數(shù)據(jù)超時(shí)問題分析

2024-05-04 23:48:26
字體:
供稿:網(wǎng)友

本文實(shí)例講述了PHP中Socket連接及讀寫數(shù)據(jù)超時(shí)問題。分享給大家供大家參考,具體如下:

雖然PHP中對(duì)fsockopen()方法有連接socket的超時(shí)參數(shù),但是沒有類似C中的連接成功后對(duì)數(shù)據(jù)的讀寫超時(shí)參數(shù)設(shè)置。沒關(guān)系,PHP中對(duì)stream提供了一系列的方法以防止超時(shí)

stream_set_blocking( $fp , false )

設(shè)置數(shù)據(jù)流為阻塞模式,以防止數(shù)據(jù)沒讀完就退出

如果模式為 false, 給定的 socket 描述符將切換到非塊模式, 如果為 true, 則切換到塊模式. 這個(gè)效果類似于 fgets() 從 socket 讀的情況. 在非塊模式 fgets() 將會(huì)立即返回,而在塊模式將等待數(shù)據(jù)滿足要求.

stream_set_timeout( $fp , 10 )

設(shè)置超時(shí),應(yīng)該在成功建立連接之后立即加上此句,后面的參數(shù)單位為秒

stream_get_meta_data( $fp )

從封裝協(xié)議文件指針中取得報(bào)頭/元數(shù)據(jù),返回的是一個(gè)數(shù)組,其中格式為:

Array(  [stream_type] => tcp_socket  [mode] => r+  [unread_bytes] => 0  [seekable] =>  [timed_out] =>  [blocked] => 1  [eof] =>)

其中索引timed_out為超時(shí)信息,超時(shí)則為true,未超時(shí)則為false,我們可以籍由此來判斷socket是否超時(shí),需要注意的是此句應(yīng)該加在每次需要等待的語句之后,比如fwrite(),fread(),并且每讀一次,都要判斷一次是否超時(shí),而對(duì)于一個(gè)連接只需一次超時(shí)設(shè)置stream_set_timeout( $fp , 10 )就可以了

代碼:

$fp = @fsockopen( $ip , $port, $errNo , $errstr, 30 );if( !$fp ){  return false;}else{  stream_set_timeout( $fp , 3 ) ;  //發(fā)送數(shù)據(jù)  fwrite( $fp , $packet ) ;  $status = stream_get_meta_data( $fp ) ;  //發(fā)送數(shù)據(jù)超時(shí)  if( $status['timed_out'] )  {    echo "Write time out" ;    fclose( $fp );    return false;  }  //讀取數(shù)據(jù)  $buf = fread( $fp , 16 ) ;  $status = stream_get_meta_data( $fp ) ;  //讀取數(shù)據(jù)超時(shí)  if( $status['timed_out'] )  {    echo "Read time out" ;    fclose( $fp );    return false;  }}

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到PHP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 和平县| 乌鲁木齐县| 伊宁市| 高邮市| 哈巴河县| 宝丰县| 滁州市| 大厂| 勐海县| 英德市| 惠州市| 南京市| 开阳县| 文登市| 宜州市| 元氏县| 郎溪县| 英山县| 玛沁县| 平乡县| 常山县| 绥江县| 乌鲁木齐市| 平阳县| 江都市| 辽宁省| 天柱县| 阿拉善右旗| 五原县| 冕宁县| 诸城市| 天津市| 高邑县| 双桥区| 旬邑县| 盐池县| 贡山| 临城县| 黎平县| 确山县| 泾阳县|