package hprose.tcphelloexam;
import hprose.client.HproseTcpClient;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TCPHelloClient {
public static void main(String[] args) throws Throwable {
System.out.println("START");
HproseTcpClient.setReactorThreads(2);
long start = System.currentTimeMillis();
int threadNumber = 40;
final int roundNumber = 25000;
Thread[] threads = new Thread[threadNumber];
final HproseTcpClient client = new HproseTcpClient(new String[] {"tcp://localhost:4321", "tcp://localhost:4321"} );
client.setFullDuplex(true);
client.setNoDelay(true);
client.setTimeout(10000);
client.setMaxPoolSize(4);
// client.subscribe("news", new Action<String>() {
// @Override
// public void call(String value) throws Throwable {
// //System.out.println(value);
// }
// }, String.class);
// client.addFilter(new HproseFilter() {
// public String getString(ByteBuffer buffer) {
// Charset charset;
// CharsetDecoder decoder;
// CharBuffer charBuffer;
// try
// {
// charset = Charset.forName("UTF-8");
// decoder = charset.newDecoder();
// charBuffer = decoder.decode(buffer.asReadOnlyBuffer());
// return charBuffer.toString();
// }
// catch (Exception ex)
// {
// ex.printStackTrace();
// return "";
// }
// }
// @Override
// public ByteBuffer inputFilter(ByteBuffer istream, HproseContext context) {
// System.out.println(getString(istream));
// return istream;
// }
// @Override
// public ByteBuffer outputFilter(ByteBuffer ostream, HproseContext context) {
// System.out.println(getString(ostream));
// return ostream;
// }
// });
// System.out.println(client.invoke("hello", new Object[] {"World"}));
// client.invoke("hello", new Object[] {"Async World"}, Promise.class).then(new Action<String>() {
// @Override
// public void call(String value) throws Throwable {
// System.out.println(value);
// }
// }, new Action<Throwable>() {
// @Override
// public void call(Throwable value) throws Throwable {
// Logger.getLogger(TCPHelloClient.class.getName()).log(Level.SEVERE, null, value);
// }
// });
for (int i = 0; i < threadNumber; i++) {
threads[i] = new Thread() {
@Override
public void run() {
try {
for (int i = 0; i < roundNumber; i++) {
client.invoke("hello", new Object[] {"World" + i});
}
} catch (Throwable ex) {
Logger.getLogger(TCPHelloClient.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
threads[i].start();
}
for (int i = 0; i < threadNumber; i++) {
if (threads[i].isAlive()) {
threads[i].join();
}
}
long end = System.currentTimeMillis();
System.out.println("总耗时: " + (end - start));
System.out.println(((threadNumber * roundNumber) * 1000/(end - start)) + " QPS");
// start = System.currentTimeMillis();
// for (int i = 0; i < 10; i++) {
// client.invoke("hello", new Object[] {"World"}, new HproseCallback1<String>() {
// @Override
// public void handler(String result) {
// System.out.println(result);
// }
// });
// }
// client.unsubscribe("news");
client.close();
// end = System.currentTimeMillis();
// System.out.println(end - start);
System.out.println("END");
}
}