linux系统c语言并发测试http协议post请求

特殊场景,工作中遇到的。

有一个http服务端需要并发测试接口处理能力。

之前开发过程中测试都是用的postman

面对高并发模拟,postman并没有相关方法。

网上分享的postman很多文章都是串行的,有点误人子弟了。

自己顺手写一个。

多线程

我启动一万个线程,一起发不就是高并发

发送post请求 我使用了curl库

一开始写了个脚本,执行curl发送命令,但这样大规模发有问题

#!/bin/sh
curl -H "Content-type: application/json" -X POST -d '{"oblique":"0","height":"43.45","scope":"43.05","weight":"1.2","rotate":"193","momper":"89.06","devsn":"000000008775","state":"0","localetime":"2021-12-31 10:25:49","ws":"0","rated_weight":"1.35","face":"0","name":"","idnum":"","worktime":""}' http://192.168.32.187:10001/

后面将脚本的内容手动用libcurl实现了一遍

/** Copyright (c), 2022, liyu,  All rights reserved. * * @FilePath: /pthread/testtyx.c* @brief:    * * @author:   liyu* @version:    0.0.0.1* @Date: 2022-04-06 20:45:09* @email:  liyu19981212@outlook.com*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <curl/curl.h>
#include <string.h>
#include "cJSON.h"int rwg_get_response(char* buffer, size_t size, size_t items, void* outstream){printf("进入回调 \n");return 0;
}
// 线程的运行函数
void *post_data(void *arg)
{CURL *curl;CURLcode res;cJSON *root;char *buff;//char pRes[1024];/*** @{"oblique":"0","height":"43.45","scope":"43.05","weight":"1.2","rotate":"193","momper":"89.06",* "devsn":"000000008775","state":"0","localetime":"2021-12-31 10:25:49","ws":"0","rated_weight":"1.35","face":"0",* "name":"","idnum":"","worktime":""}* 组装数据*/root = cJSON_CreateObject();cJSON_AddStringToObject(root,"oblique","0");cJSON_AddStringToObject(root,"height","43.45");cJSON_AddStringToObject(root,"scope","43.05");cJSON_AddStringToObject(root,"weight","1.2");cJSON_AddStringToObject(root,"rotate","193");cJSON_AddStringToObject(root,"momper","89.06");cJSON_AddStringToObject(root,"devsn","000000008775");cJSON_AddStringToObject(root,"state","0");cJSON_AddStringToObject(root,"localetime","2021-12-31 10:25:49");cJSON_AddStringToObject(root,"ws","0");cJSON_AddStringToObject(root,"rated_weight","1.35");cJSON_AddStringToObject(root,"face","0");cJSON_AddStringToObject(root,"name","");cJSON_AddStringToObject(root,"idnum","");cJSON_AddStringToObject(root,"worktime","");buff = cJSON_PrintUnformatted(root);curl = curl_easy_init();////HTTP报文头  struct curl_slist* headers = NULL;curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.32.187:10001/");curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 0);    //不跳转curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 300);headers=curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);curl_easy_setopt(curl, CURLOPT_POST, 1);//设置为非0表示本次操作为POSTccurl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(buff));curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buff);//curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)pRes);//不需要回复//curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, rwg_get_response);//不进入回调res = curl_easy_perform(curl);// if (res != CURLE_OK) {//     printf("Fail to request %d\n",res);// }curl_easy_cleanup(curl);}int main(int argc, char **argv)
{int ret;int num = 1000;int i;//读取输入的线程个数if (argc > 0) {num = atoi(argv[1]);}printf("num = %d \n",num);// 定义线程的id变量,多个变量使用数组pthread_t tids[num];for (i=0; i<num; i++){// 参数依次是: 创建的线程id,线程参数,调用的函数,传入的函数参数ret = pthread_create(&tids[i], NULL, post_data, NULL);if (ret != 0){printf("pthread_create error: error_code = \n");}}// 等各个线程推出后,进程才结束pthread_exit(NULL);return 0;
}

编译执行

测试100个无误

200个还行

300个挂了

是设备配置太拉胯

linux系统c语言并发测试http协议post请求相关推荐

  1. AVI音视频封装格式学习(四)——linux系统C语言AVI格式音视频封装应用

    拖了很久的AVI音视频封装实例,花了一天时间终于调完了,兼容性不是太好,但作为参考学习使用应该没有问题.RIFF和AVI以及WAV格式,可以参考前面的一些文章.这里详细介绍将一个H264视频流和一个2 ...

  2. linux c 串口 调用命令,Linux系统C语言串口收发

    Linux系统C语言串口收发 Linux系统对串口提供了很好的支持,使我们很容易就能用C语言编写出串口收发程序. 先简单说明一下编写串口收发程序前的准备工作.首先串口收发需要有硬件上的串口,在Linu ...

  3. Linux系统C语言遍历系统文件系统,并查询其磁盘使用率(有效磁盘)

    getmntent_r接口示例程序地址:https://github.com/Rtoax/test/tree/master/c/glibc/mntent statfs 接口示例程序地址​​​​​​​: ...

  4. linux 系统 Shell语言 基础

    linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 ​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...

  5. linux ssd iops测试,Linux系统硬盘的IOPS测试

    Linux系统硬盘的IOPS测试 什么是IOPS? IOPS (英文:Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡 ...

  6. Linux系统下实现基于TCP/IP协议的简单Socket通信

    Linux系统下实现基于TCP/IP协议的简单Socket通信 网络套接字Socket Socket概念 主机字节序和网络字节序 Sockaddr地址结构 Socket实现客户端.服务端通信 服务端程 ...

  7. Linux下nvidia压力测试,一种服务器linux系统下GPU压力测试的监控方法与流程

    本发明属于服务器测试技术领域,具体涉及一种服务器linux系统下GPU压力测试的监控方法. 背景技术: 随着社会的快速发展,人们对高网络性能.快速存储.大量内存.超高计算能力的GPU的需求越来越大,产 ...

  8. linux系统C语言学习总结

    引言 尽管 C 语言问世已近 30 年,但它的魅力仍未减退.C 语言继续吸引着众多的开发者,他们为了编写.移植或维护应用程序而必须学习新技能. 本文是为了满足对C语言初学者或想提高自身C语言修为的开发 ...

  9. ME909S-821 4G-LTE模块在Linux系统下拨号上网测试

    转:https://blog.csdn.net/csdnhuaong/article/details/74910569 实验平台 大前提 图形化界面配置拨号上网操作 利用wvdial工具软件拨号上网操 ...

最新文章

  1. SVN服务器搭建--Subversio与TortoiseSVN的配置安装
  2. 探访火车票“守护者”:一卷票据值百万 压力大到失眠
  3. oracle 如何形成死锁,ORACLE死锁
  4. 毕业论文 | 便携式环境烟雾监测器(源码、电路图)
  5. oracle 数据库数据迁移解决方案
  6. 搜索引擎蜘蛛爬虫原理
  7. 完整学习git五git重置
  8. MSP430学习笔记2---两个LED同时亮灭和顺闪
  9. 易到用车提现再度被延期?!声明:因贾跃亭所欠债务导致
  10. [阅读记录]《新ABS_Guide_cn.txt》shell脚本的编写
  11. asp 文件上传 代码
  12. 三星android安卓版本怎么升级,大神教你三星S7如何更新安卓7.0 三星S7升级安卓7.0详细教程...
  13. 建筑工程师的转行学计算机科学与技术的抉择
  14. 训练集、测试集、验证集之间的区别及理解
  15. 中国区块链专利申请数破万:阿里巴巴、联通、复杂美稳居前三甲
  16. 关于虚拟机Ubuntu联网问题
  17. 虚拟机启动失败-Intel VT-x 处于禁用状态 的解决方案
  18. Are You a Software Architect?
  19. 2019年上半年英语四、六级成绩查询方式和时间
  20. phpspreadsheet 中文文档(七)技巧和诀窍

热门文章

  1. Java各类技能知识点学习链接大全:八、Redis 缓存
  2. JDK8 Stream 数据流效率分析,Java开发你需要了解的那些事
  3. 回归分析模型检验评估
  4. 多项式mod的运算(例题)
  5. Hadoop生态系统介绍-汇总-标注重点
  6. 轻量化服务,大道至简,触手可及
  7. java后端与前端的交互_前端和后端数据交互的基本知识和常见方式
  8. 实战篇-OpenSSL之AES加密算法-CFB8模式
  9. mysql重设主从_mysql主从重置
  10. python中scipy.optimize_使用Python优化(scipy.optimize)