我想用Mina框架做一个高并发的测试:500个客户端同时访问服务器。要写500个Client和500个ClientHandler吗?
500 次 ConnectFuture connect = connector.connect(new InetSocketAddress(HOST, PORT)) 得到 500 个 IoSession,一个 ClientHandler 。
我是写了一个ClientFactory,在Client中开了500个线程,ClientFactory.getClient(Consist.HOSTS[j], Consist.PORT,
Consist.HANLERS[j]);不知道是否能行?
@liyuhaoo: 可以,你可以使用抓包软件看看建立了多少条连接来验证。
@Launcher: 控制台的输出:
服务端启动 开始监听端口:3005
第 1个客户端登录,RemoteAddress:/127.0.0.1:59772
第 2个客户端登录,RemoteAddress:/127.0.0.1:59773
第 3个客户端登录,RemoteAddress:/127.0.0.1:59774
第 4个客户端登录,RemoteAddress:/127.0.0.1:59775
第 5个客户端登录,RemoteAddress:/127.0.0.1:59776
常量类:
public final class Consist {
public static final String[] HOSTS = { "127.0.0.1", "127.0.0.2",
"127.0.0.3", "127.0.0.4", "127.0.0.5" };
public static int PORT = 3005;
public static IoHandler HANLERS = new MinaClient1Handler();
}
Client类:
public class MinaClient {
public static void main(String[] args) {
for (int i = 0; i < Consist.HOSTS.length; i++) {//开3个线程
final int j=i;
new Thread(new Runnable() {
@Override
public void run() {
ClientFactory.getClient(Consist.HOSTS[j], Consist.PORT,
Consist.HANLERS);
}
}).start();
}
}
}
为什么输出的IP为同一个呢?
@liyuhaoo: 因为你是从同一个网卡出去的请求,虽然 IP 相同,但是 PORT 不一样。你学过《计算机网络》这么课程吗?
@Launcher: 那我定义的 public static final String[] HOSTS = { "127.0.0.1", "127.0.0.2",
"127.0.0.3", "127.0.0.4", "127.0.0.5" };岂不是没有用?
@liyuhaoo: 这表示的是主机,不是你的客户端。是说客户端想要连接到下列 5 个地址:
127.0.0.1:3005
127.0.0.2:3005
127.0.0.3:3005
127.0.0.4:3005
127.0.0.5:3005
能否劳你大驾找本《计算机网络》学习点基础知识。
@Launcher: 懂了,谢谢啊
问下这个mina的服务器端能做集群吗?