我有一个TCP服务器,我正在使用一个虚拟客户端进行测试,该虚拟客户端由一个非常简单的Java应用程序组成,该应用程序建立套接字连接并向服务器发送字节流。
我可以在for循环中设置要使用的连接数,因此如果我将其设置为100,它将启动100个连接到服务器并转储数据的线程。
我想知道如何准确地检查我有多少并发连接?
例如,如果我将客户端设置为1,000个连接,那么在连接了大约600个套接字后,我开始获取ConnectException: Connection Refused
。
这是否意味着服务器可以同时处理500个套接字连接是否公平? 我该如何准确测量?
如果我在每个套接字连接之间添加Thread.sleep()
5纳秒,那么服务器根本不会崩溃。
答案 0 :(得分:0)
使用ExecutorService执行线程而不是thread.start()方法。 我希望这能解决你的问题。
以下是供参考的示例代码。
public class TCPServer{
private ExecutorService pool = Executors.newCachedThreadPool();
public acceptClients(){
while(true){
pool.execute(new ClientListner(serverSocket.accept()));
}
}
}
public class ClientListner extends Thread{
private Socket client;
public ClientListner(Socket client) {
this.client = client;
}
public void run() {
//TODO add your code here
}
}