Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java发送并行POST请求_Java_Multithreading - Fatal编程技术网

如何用Java发送并行POST请求

如何用Java发送并行POST请求,java,multithreading,Java,Multithreading,我目前正在尝试对服务器进行负载测试。由于我无法控制的问题,我无法使用jmeter进行测试。创建一组线程并让每个线程在同一时刻发送帖子,或者尽可能接近帖子的最佳方式是什么?我当前的实现在运行向服务器发送topost的方法之前创建了许多带有for循环的线程。但这根本不是并发的。我绝对建议使用一些负载测试应用程序框架。有很多可供选择 话虽如此,你可以从这样的事情开始。这就是我的出发点。您需要实现performRequest方法。至少可以说,这不是很稳健。没有日志记录,没有报告,没有错误处理——所有这些

我目前正在尝试对服务器进行负载测试。由于我无法控制的问题,我无法使用jmeter进行测试。创建一组线程并让每个线程在同一时刻发送帖子,或者尽可能接近帖子的最佳方式是什么?我当前的实现在运行向服务器发送topost的方法之前创建了许多带有for循环的线程。但这根本不是并发的。

我绝对建议使用一些负载测试应用程序框架。有很多可供选择

话虽如此,你可以从这样的事情开始。这就是我的出发点。您需要实现
performRequest
方法。至少可以说,这不是很稳健。没有日志记录,没有报告,没有错误处理——所有这些都是通过负载测试应用程序“免费”得到的(对于“免费”的某些定义)

public class HttpClient {
    enum RequestType{
        POST,GET
    }

    private RequestType type;
    private String url;

    public HttpClient(RequestType rt, String url){
        type = rt;
        this.url = url;
    }

    public void performRequest(){
       // your code here.
    }

    public static void main(String[] args){
        List<HttpClient> clients = new ArrayList<>();
        int clientCount = Integer.parseInt(args[0]);
        String url = args[1];
        for(int i=0; i<clientCount; i++){
            clients.add(new HttpClient(RequestType.POST,url));
        }
        clients.parallelStream().forEach(HttpClient::performRequest);
    }
}
公共类HttpClient{
枚举请求类型{
发帖
}
私有请求类型;
私有字符串url;
公共HttpClient(RequestType rt,字符串url){
类型=rt;
this.url=url;
}
公共无效性能请求(){
//你的代码在这里。
}
公共静态void main(字符串[]args){
List clients=new ArrayList();
int clientCount=Integer.parseInt(args[0]);
字符串url=args[1];

对于(inti=0;i,我绝对建议使用一些负载测试应用程序框架

话虽如此,您可以从这样的东西开始。这就是我的出发点。您需要实现
performRequest
方法。至少可以说,这不是很健壮。没有日志记录,没有报告,没有错误处理——所有这些都是“免费的”(对于某些“免费”的定义)使用负载测试应用程序

public class HttpClient {
    enum RequestType{
        POST,GET
    }

    private RequestType type;
    private String url;

    public HttpClient(RequestType rt, String url){
        type = rt;
        this.url = url;
    }

    public void performRequest(){
       // your code here.
    }

    public static void main(String[] args){
        List<HttpClient> clients = new ArrayList<>();
        int clientCount = Integer.parseInt(args[0]);
        String url = args[1];
        for(int i=0; i<clientCount; i++){
            clients.add(new HttpClient(RequestType.POST,url));
        }
        clients.parallelStream().forEach(HttpClient::performRequest);
    }
}
公共类HttpClient{
枚举请求类型{
发帖
}
私有请求类型;
私有字符串url;
公共HttpClient(RequestType rt,字符串url){
类型=rt;
this.url=url;
}
公共无效性能请求(){
//你的代码在这里。
}
公共静态void main(字符串[]args){
List clients=new ArrayList();
int clientCount=Integer.parseInt(args[0]);
字符串url=args[1];

对于(int i=0;i假设他的问题只是关于同步你的线程,而不是创建/运行线程,那么我推荐a。链接中的示例很好。

假设他的问题只是关于同步你的线程,而不是创建/运行线程,那么我推荐a。链接中的示例很好。

我说你不会uld希望在集群中执行此操作,而不是在同一台机器上的多个线程中执行此操作,除非您的机器具有多个网络接口卡(NIC)。瓶颈不是核心,而是NIC。NIC仍将按顺序清空其缓冲区


我建议您拥有一个由尽可能多的机器组成的集群。在每台机器上都有两个线程(只是为了确保NIC的缓冲区保持满)。不要麻烦同步集群以同时发送请求,因为往返时间(RTT)将花费太长的时间,这将使您的负载测试无效。只需删除每个线程……从统计上讲,如果您的群集足够大,您肯定会同时收到几个POST请求。

我说您希望在一个群集中执行此操作,而不是在同一台机器上的多个线程中执行,除非您有一台机器使用多个网络接口卡(NIC)。瓶颈不是核心,而是NIC。NIC仍将按顺序清空其缓冲区


我建议您拥有一个由尽可能多的机器组成的集群。在每台机器上都有两个线程(只是为了确保NIC的缓冲区保持满)。不要麻烦同步集群以同时发送请求,因为往返时间(RTT)将花费太长的时间,这将使您的负载测试无效。只需将每个线程删除…从统计上讲,如果您的集群足够大,您肯定会同时收到两个POST请求。

如果您从外部对服务器进行负载测试(模拟HTTP流量),我看不出jmeter与架构有什么关系,流量是如何产生的并不重要。那么为什么JMeter是不可能的呢?我不能具体地说。但有一种方法是我处理数据,JMeter无法做到的。这不是重要的部分。我想说的是,你希望在集群中这样做,而不是在同一台机器上的多个线程中这样做,除非你有一台带有多个NIC的机器。你知道吗r瓶颈不是核心,而是您的NIC。您的NIC仍将按顺序清空其缓冲区。如果您从外部(模拟HTTP流量)对服务器进行负载测试,我看不出jmeter与体系结构有何关联,流量是如何产生的并不重要。那么为什么JMeter是不可能的呢?我不能具体地说。但有一种方法是我处理数据,JMeter无法做到的。这不是重要的部分。我想说的是,你希望在集群中这样做,而不是在同一台机器上的多个线程中这样做,除非你有一台带有多个NIC的机器。你知道吗r瓶颈不是核心,而是您的NIC。您的NIC仍将按顺序清空其缓冲区。除非我弄错了,否则OP要求使用POST请求进行负载测试。所有客户端请求都应该是自主的,并且服务器应该已经过功能测试。因此,不会考虑同步。“我当前的实现在运行发送到POST到服务器的方法之前创建了许多带有for循环的线程。但这根本不是并发的。”听起来像是同步问题。好的,我可以看出,如果他费心在某个共享连接或其他什么上进行同步,但不应该有任何共享资源