怎么设置 http 请求 并发 连接数 限制
时间:2022-05-05
本文章向大家介绍怎么设置 http 请求 并发 连接数 限制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
问:
我需要不停的get一个url
但是 不管 我开启 20 个 还是 100个 goroutine 进行 http.Get
最终都是 每秒能请求10次左右
能不能 修改这个限制?
我的需求和这个比较类似
http://www.cnblogs.com/eaglet/archive/2012/05/18/2507179.html
答:
不像有这个限制啊,跑跑下面的代码看看。
package main
import (
"flag"
"fmt"
"io/ioutil"
"net/http"
"os"
"strconv"
"time"
)
var ns = flag.String("n", "", "-n 100 | -n 1000 | ...")
var cs = flag.String("c", "", "-c 10 | -c 100 | ...")
var url = flag.String("url", "", "-url http://localhost:8080/")
var ps = flag.String("p", "", "true|false")
func main() {
flag.Parse()
n, err := strconv.Atoi(*ns)
if err != nil {
fmt.Println("cant parse n", err, *ns)
os.Exit(1)
}
c, err := strconv.Atoi(*cs)
if err != nil {
fmt.Println("cant parse c", err, *cs)
os.Exit(1)
}
if *url == "" {
fmt.Println("please input url")
os.Exit(1)
}
fmt.Println(n, c, *url)
tasks := make(chan bool, n)
for i := 0; i < n; i++ {
tasks <- true
}
begin := time.Now()
cnt := 0
cntChan := make(chan bool)
for i := 0; i < c; i++ {
go func() {
for len(tasks) > 0 {
<-tasks
res, err := http.Get(*url)
if err != nil {
panic(err)
} else {
defer res.Body.Close()
content, err := ioutil.ReadAll(res.Body)
if err != nil {
panic(err)
} else {
if *ps == "true" {
fmt.Println(string(content))
}
}
}
cntChan <- true
}
}()
}
for {
b := false
select {
case <-cntChan:
cnt += 1
if cnt%(n/10) == 0 {
b = true
fmt.Printf("finished %d request n", cnt)
}
if cnt == n {
if !b {
fmt.Printf("finished %d request n", cnt)
}
goto END
}
}
}
END:
ts := time.Now().Sub(begin).Seconds()
fmt.Printf("%.3f requests/second n", float64(cnt)/ts)
}
- Linux下的计算命令和求和、求平均值、求最值命令梳理
- 网卡自适应带来的麻烦
- silverlight:手写板/涂鸦/墨迹/InkPresenter示例程序
- Linux下日志文件监控系统Logwatch的使用记录
- .net中使用oracle数据库分页的土办法
- 图表的一些资源
- 删除文件后,磁盘空间没有释放的处理记录
- silverlight:ListBox中如何取得DateTemplate/ItemsPanelTemplate中的命名控件?
- 表格效果2
- Linux终端复用神器-Tmux使用梳理
- 程序实现下载文件或者打开文件
- VisualTreeHelper
- Linux下路由配置梳理
- Gitlab利用Webhook实现Push代码后的jenkins自动构建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php 输出缓冲 Output Control用法实例详解
- PHP使用gearman进行异步的邮件或短信发送操作详解
- php多进程并发编程防止出现僵尸进程的方法分析
- php+ajax实现文件切割上传功能示例
- php操作redis数据库常见方法实例总结
- php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
- PHP pthreads v3使用中的一些坑和注意点分析
- php ActiveMQ的安装与使用方法图文教程
- ThinkPHP5与单元测试PHPUnit使用详解
- php实现通过stomp协议连接ActiveMQ操作示例
- PHP pthreads v3下的Volatile简介与使用方法示例
- php实现根据身份证获取精准年龄
- php 使用ActiveMQ发送消息,与处理消息操作示例
- php使用gearman进行任务分发操作实例详解
- laravel框架select2多选插件初始化默认选中项操作示例