我正在模拟客户端和服务器之间的简单连接。发送客户端请求,服务器以并发方式处理它们:服务器类扩展 Thread,并在创建对象时运行任务。
服务器始终处于打开状态,监听请愿书,当有请愿书时,会使用套接字作为参数创建一个对象,然后按照我所说的方式运行任务。
我正在尝试测量处理一个客户一次发送的所有请愿书所需的时间,但我无法做到这一点。对于线程、池等,我通常会花费初始时间,并在我知道一切都完成时花费时间,瞧(通常在连接或检查池是否终止之后)。
但现在我无法知道所有任务何时完成,因为服务器始终在运行。
有什么想法吗?
我将尝试总结代码,以防有人不理解:
import java.net.*;
import java.io.*;
public class MyServer extends Thread
{
Socket socket;
public MyServer(Socket s) { socket=s; this.start(); }
public void run()
{
// proccessing of the data sent by the client (just printing values)
// data is read properly, don't worry
socket.close();
}
public static void main(String[] args)
{
int port = 2001; // the same one the client is using
try
{
ServerSocket chuff = new ServerSocket(port, 3000);
while (true)
{
Socket connection = chuff.accept();
new MyServer(connection);
}
} catch (Exception e) {}
}
}
最佳答案
从您的问题中不清楚客户端是否会(a)稍后通过单个连接发送更多工作,或(b)一次打开多个连接。
如果两者都做不到,那么处理一个连接就是计时的工作单元(事实上,我认为您需要计时的是线程存活的时间)。
如果客户端可能会执行其中一项操作,那么如果可以的话,请更改协议(protocol),以便客户端在单个数据包中发送工作;然后测量处理这些数据包之一需要多长时间。这为您提供了对实际测量内容的明确定义,缺乏该定义可能会导致您出现问题。
关于java - 如何测量使用Sockets和并发时的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386429/