Webサービスの応答時間差取得にフォークアナログマルチプロセスの同時アクセス

書式#include <ROS / ros.h> 
の#include <iostreamの> 
の#include < 文字列 > 
の#include <CStringの>
 // 名称空间映射表 
の#include " k8s_sum / SumServiceImplPortBinding.nsmap " 
の#include " k8s_sum / soapSumServiceImplPortBindingProxy.h " 
// 名前空間stdを使用。
する#include <stdio.hに> 
する#include <iostreamの> 
する#include <unistd.h> 
の#include <fstreamの> 
する#include <TIME.H> 
の#includeは<sys / types.h>に


現在の時刻を取得
ダブルgetCurrentTime(){
     構造体;体timevalテレビ
    にgettimeofday( テレビ、NULL);
     // * + tv.tv_usec / 1000 1000 tv.tv_sec返す; // MSが
    返す tv.tv_sec * 1000年 + tv.tv_usec / 1000年 tv.tv_usec%+ 1000年 * 0.001 ; // MS進
}
 //は、アレイ内の平均値を算出
ダブル getAvgDiff(ダブル * 差分){
     ダブル SUM = 0.0 ;
     のためint型 I = 0 ; IはNUMを<; I ++は){
        SUM + = *(差分+ I); 
    } 
    戻り SUM / NUM; 
} 

// 総ハンドラ
のボイドハンドル(){
     // ファイルへの出力
    STD :: ofstreamのFOUT;
     int型 PID = GETPID(); 
    STD :: 文字列 fileNameに= " を/ tmp / rosSumfile_ " +のstd :: to_stringに(PID)+ " .DAT " ; 
    fout.open(ファイル名、STD ::イオス:: APP); 
    ダブル FIRST_TIME; // 今回の初めに記録
    ダブル Last_timeを; / / 最後の時間を記録
    ダブル avg_diffを; //平均応答時間
    をダブル差分[NUM] = { 0.0 };
     のためのint型 I = 0 ; IはNUMを<Iは++ ){ 

        SumServiceImplPortBindingProxy sumWebservice; 
        
        K8S1__getSum sumRequest; 
        K8S1__getSumResponse RES、
        INT A、B;
         // ランダム2 1-100数 
        A = RAND()%100 ; 
        B = RAND()%100 ; 
        sumRequest.arg0 = A; 
        sumRequest.arg1 = B; 

        STD :: COUT << " A = " << << A "、B = " << << B STD :: ENDL; 

        のtime_t TT =時間(NULL); // フレーズだけ、最も近い秒にタイムスタンプを返す
         // ; clock_t START_TIMEの、END_TIME // ミリ秒のこの精度
         / / START_TIME =時計(); 
        ダブルSTART_TIME、END_TIME; 
        START_TIME = getCurrentTime();
         IF(I == 0 ){ 
            FIRST_TIME = START_TIME; // 最初にログ
        } 
        FOUT << 現在のタイムスタンプ(k8s_sum)要求(MS )= " << STD :: to_stringに(START_TIME);
         int型結果= sumWebservice.getSum(&sumRequest、RES)。
        // 睡眠(2); 暂停2秒
        であれば(SOAP_OK == 結果)
        { 
            int型 sum_value = res.return_。
            // のtime_t TT1 =時間(NULL)。
            END_TIME = getCurrentTime()。
            もし(I + 1 == NUM){ 
                last_time = END_TIME。
            } 
            FOUT << " 応答(MS)= " << のstd :: to_stringに(END_TIME)。
            FOUT << " 差分(MS)= "<< END_TIME-のstart_time << はstd ::てendl; 
            差分[I] = end_time- START_TIME。
        } { 
            FOUT << " 要求はエラーになります!" << はstd ::てendl; 
        } 

    } 
    // 计算平均响应时间 
    avg_diff = getAvgDiff(差分)。
    FOUT << " カウントFIRSTTIME = " <<のstd :: to_stringに(FIRST_TIME)<< "lastTime = " <<のstd :: to_stringに(last_time)<< "avgDiff = " << avg_diff << はstd :: ENDL。
    fout.close(); 
}
 
int型のmain(int型のargc、char型 ** ARGV)
{ 
    ROS ::のinit(argcの、ARGV、" k8s_sum_node " ); 
    pid_t pidの; 
    // 子プロセスを作成する
    ためにint型私= 0 ;私<FORK_NUM、私は++ ){ 
        PID = フォーク();
         // 子プロセスがループを終了し、もはや子プロセス、一次プロセスによって作成されたすべての子プロセスを作成し、ここで重要ではない
        IF(PIDの== 0 || PID == - 1 ){
             BREAK ; 
        } 
    } 
    IF( == PID - 。1 ){ 
        ROS_INFO("失敗するフォーク!" ); 
        出口(1。); 
    } 
    他の IF(PIDの== 0 ){
         // 子プロセス処理ロジックの
        ハンドル(); 
        SLEEP(5 ); 
        終了(0 ); 
    } 
    {
         // メイン処理プロセス論理
        ハンドル(); 
        終了(0 ); 
    } 
    
    ROS ::スピン(); 
    戻り 0 ; 
}
コードの表示

プログラムROSを使用して

これは、Webサービスの加算器、和をシミュレート

 

おすすめ

転載: www.cnblogs.com/yytlmm/p/11311797.html