#include <ros/ros.h>
#include <iostream>
#include <string>
#include <cstring>
// 名称空间映射表
#include "k8s_sum/SumServiceImplPortBinding.nsmap"
#include "k8s_sum/soapSumServiceImplPortBindingProxy.h"
//using namespace std;
#include <stdio.h>
#include <iostream>
#include <unistd.h>
#include <fstream>
#include <time.h>
#include <sys/types.h>
#define NUM 1000
#define FORK_NUM 100 //获取当前时间
double getCurrentTime(){
struct timeval tv;
gettimeofday(&tv,NULL);
//return tv.tv_sec*1000+tv.tv_usec/1000;//毫秒
return tv.tv_sec*+tv.tv_usec/+tv.tv_usec%*0.001;//毫秒带小数
}
//计算数组内平均值
double getAvgDiff(double *diffs){
double sum = 0.0;
for(int i=;i<NUM;i++){
sum +=*(diffs+i);
}
return sum/NUM;
} //总处理函数
void handle(){
//输出到文件
std::ofstream fout;
int pid = getpid();
std::string fileName="/tmp/rosSumfile_"+std::to_string(pid)+".dat";
fout.open(fileName, std::ios::app);
double first_time;//记录本次最开始时间
double last_time;//记录本次最后一次时间
double avg_diff;//平均响应时间
double diffs[NUM] ={0.0};
for(int i=;i<NUM;i++){ SumServiceImplPortBindingProxy sumWebservice; K8S1__getSum sumRequest;
K8S1__getSumResponse res;
int a,b;
//两个1-100的随机数
a= rand() % ;
b= rand() % ;
sumRequest.arg0 = a;
sumRequest.arg1 = b; std::cout<<"a="<<a<<",b="<<b<<std::endl; time_t tt = time(NULL);//这句返回的只是一个时间戳 精确到秒
//clock_t start_time,end_time; //这个会精确到毫秒
//start_time = clock();
double start_time,end_time;
start_time = getCurrentTime();
if(i==){
first_time = start_time;//记录第一次时间
}
fout<<"Current timestamp(k8s_sum) request(ms)="<<std::to_string(start_time);
int result = sumWebservice.getSum(&sumRequest, res);
//sleep(2); 暂停2秒
if(SOAP_OK == result)
{
int sum_value = res.return_;
//time_t tt1 = time(NULL);
end_time = getCurrentTime();
if(i+==NUM){
last_time = end_time;
}
fout<<",response(ms)="<<std::to_string(end_time);
fout<<",the diff(ms)="<<end_time-start_time<<std::endl;
diffs[i]=end_time-start_time;
}else{
fout<<",request is error!"<<std::endl;
} }
//计算平均响应时间
avg_diff = getAvgDiff(diffs);
fout<<"Count 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;
//创建子进程
for(int i=;i<FORK_NUM;i++){
pid = fork();
//子进程退出循环,不再创建子进程,全部由主进程创建子进程 ,这里是关键所在
if(pid == || pid == -){
break;
}
}
if(pid == -){
ROS_INFO("Fail to Fork!");
exit();
}
else if(pid == ){
//子进程处理逻辑
handle();
sleep();
exit();
}
else{
//主进程处理逻辑
handle();
exit();
} ros::spin();
return ;
}

采用了ROS 的编程方式

Web Service 模拟了一个 加法运算,计算求和

Fork 多进程 模拟并行访问web service获取响应时间差的更多相关文章

  1. SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)

    上个示例(SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API))是基于JavaScript,运行在web browser内去访问REST AP ...

  2. SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)

          虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecutor里 .它能访问跨域的服务包括REST AP ...

  3. 通过Places API Web Service获取兴趣点数据

    实验将爬取新加坡地区的银行POI数据 数据库采用mongodb,请自行安装,同时申请google的key 直接上代码 #coding=utf-8 import urllib import json i ...

  4. Calling the Web Service dynamically (.NET 动态访问Web Service)

    针对.NET平台下的WebService访问,为达到不添加引用的情况下,动态调用外部服务. 主体方法: public class WebServiceHelper { //Calling the We ...

  5. Exchange Web Service 获取邮件的附件并保存到本地的示例代码

    private static void DownLoadMailAttachments(ExchangeService service, ItemId itemId) { EmailMessage m ...

  6. C++模拟Http/Https访问web站点

    一.概述 1.Http与Https的区别与联系 在OSI参考模型中Http与Https均属于应用层协议.Http即Hypertext Transfer Protocol,超文本传输协议:而Https为 ...

  7. [转载] 学会使用Web Service上(服务器端访问)~~~

    http://www.360doc.com/content/10/0712/12/541242_38461863.shtml# 关于什么是Web Service,相信在很多地方都会有介绍.简单的讲,W ...

  8. 测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)

    Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...

  9. .NET Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)

    Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...

随机推荐

  1. Input标签中Type的类型及详细用法

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍.1,type=text输入类型是text,这是我们见的最多 ...

  2. 线性表的顺序存储C++代码实现

      关于线性表的概念,等相关描述请参看<大话数据结构>第三章的内容, 1 概念   线性表list:零个或多个数据的有限序列.   可以这么理解:糖葫芦都吃过吧,它就相当于一个线性表,每个 ...

  3. PTP 接线方式及通讯距离

    PTP 接线方式 CB 1241 RS485 接线 (6ES7 241 1CH30-1XB0) CB1241 RS485 信号板(安装在CPU机本体上) ,订货号为: 6ES7 241 1CH30-1 ...

  4. 001_html基本结构

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. pdfminer获取整页文本

    #! python2 # coding: utf-8 import sys from cStringIO import StringIO from pdfminer import pdfinterp ...

  6. Spring Cloud Alibaba | Nacos配置管理

    目录 Spring Cloud Alibaba | Nacos配置管理 1. pom.xml 项目依赖 2. 在 bootstrap.properties 中配置 Nacos server 的地址和应 ...

  7. ecshop数据库结构和字段介绍(转载)

    ecs_account_log:账户变动日志(注册用户充值.支付等记录信息)字段 类型 Null 默认 字段说明log_id mediumint(8) 否 无 日志IDuser_id mediumin ...

  8. 一秒完成springboot与logback配置

    1. 一秒配置与效果 1.1 一秒配置 ​ spring boot中无须添加任何依赖,直接在resources文件夹下面新建logback.xml文件,将以下代码复制过去,配置完成,可以使用了. &l ...

  9. .NET Core CSharp初级篇 1-1

    .NET Core CSharp初级篇 1-1 本节内容是对于C#基础类型的存储方式以及C#基础类型的理论介绍 基础数据类型介绍 例如以下这句话:"张三是一名程序员,今年15岁重50.3kg ...

  10. 异常:带有 CLSID {} 的 COM 对象无效或未注册

    今天处理调试打印程序的时候,看到这个异常: 代码: try { string strApplyEmpno=""; string strApplyDeptCode="&qu ...