use of com.firenio.component.IoEventHandle in project baseio by generallycloud.
the class TestLoadClient method test.
public static void test(TestLoadRound round) throws Exception {
final String host = round.host;
final ByteBuf buf = round.request_buf;
final int port = round.port;
final int pipes = round.pipes;
final int threads = round.threads;
final int requests = round.requests;
final int connections = round.connections;
final int batch = requests / pipes;
DebugUtil.info("requests:" + requests);
DebugUtil.info("threads:" + threads);
DebugUtil.info("connections:" + connections);
DebugUtil.info("pipes:" + pipes);
DebugUtil.info("batch:" + batch);
NioEventLoopGroup g = new NioEventLoopGroup(true, threads, Integer.MAX_VALUE);
g.start();
Channel[] chs = new Channel[connections];
DebugUtil.info("build connections...");
CountDownLatch c_latch = new CountDownLatch(connections);
CountDownLatch b_latch = new CountDownLatch(batch);
AtomicInteger c_complete = new AtomicInteger();
long last = Util.now();
for (int i = 0; i < connections; i++) {
ChannelConnector context = new ChannelConnector(g.getNext(), host, port);
context.setPrintConfig(false);
context.addProtocolCodec(new ClientHttpCodec());
context.setIoEventHandle(new IoEventHandle() {
int c = 0;
int b = batch / connections;
@Override
public void accept(Channel ch, Frame frame) {
if (++c == pipes) {
c = 0;
b_latch.countDown();
if (--b > 0) {
ch.writeAndFlush(buf.duplicate());
} else {
DebugUtil.info("c complate......" + c_complete.incrementAndGet());
}
}
}
});
final int i_copy = i;
context.connect((ch, ex) -> {
if (ex != null) {
ex.printStackTrace();
}
chs[i_copy] = ch;
c_latch.countDown();
}, 9000);
}
c_latch.await();
DebugUtil.info("build connections cost:" + (Util.now() - last));
DebugUtil.info("start request...");
last = Util.now();
for (int i = 0; i < chs.length; i++) {
chs[i].writeAndFlush(buf.duplicate());
}
b_latch.await();
long cost = (Util.now() - last);
DebugUtil.info("request cost:" + cost);
DebugUtil.info("request rps:" + (requests * 1000d / cost));
for (int i = 0; i < chs.length; i++) {
chs[i].close();
}
g.stop();
}
use of com.firenio.component.IoEventHandle in project baseio by generallycloud.
the class TestLoadClient1 method prepare.
@Override
public void prepare() throws Exception {
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) {
addCount(80000);
if (debug) {
count.decrementAndGet();
}
}
};
NioEventLoopGroup group = new NioEventLoopGroup();
group.setMemoryCapacity(5120000 * 256 * CLIENT_CORE_SIZE);
group.setMemoryUnit(256);
group.setWriteBuffers(TestLoadServer.WRITE_BUFFERS);
group.setEnableMemoryPool(TestLoadServer.ENABLE_POOL);
context = new ChannelConnector(group, "127.0.0.1", 8300);
context.setIoEventHandle(eventHandleAdaptor);
if (TestLoadServer.ENABLE_SSL) {
context.setSslContext(SslContextBuilder.forClient(true).build());
}
context.setPrintConfig(false);
context.addProtocolCodec(new LengthValueCodec());
if (TestLoadServer.ENABLE_WORK_EVENT_LOOP) {
context.setExecutorGroup(new ThreadEventLoopGroup("ep", 1024 * 256));
}
context.connect(6000);
}
use of com.firenio.component.IoEventHandle in project baseio by generallycloud.
the class TestLoadClient method main.
public static void main(String[] args) throws Exception {
final Logger logger = LoggerFactory.getLogger(TestLoadClient.class);
final CountDownLatch latch = new CountDownLatch(time);
final AtomicInteger res = new AtomicInteger();
final AtomicInteger req = new AtomicInteger();
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
// latch.countDown();
// long count = latch.getCount();
// if (count % 10 == 0) {
// if (count < 50) {
// logger.info("************************================" + count);
// }
// }
// logger.info("res==========={}",res.getAndIncrement());
}
};
ChannelConnector context = new ChannelConnector(8300);
context.setIoEventHandle(eventHandleAdaptor);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addProtocolCodec(new LengthValueCodec());
Channel ch = context.connect();
System.out.println("################## Test start ####################");
long old = Util.now();
for (int i = 0; i < time; i++) {
LengthValueFrame frame = new LengthValueFrame();
frame.write("hello server!", ch);
ch.writeAndFlush(frame);
}
latch.await();
long spend = (Util.past(old));
System.out.println("## Execute Time:" + time);
System.out.println("## OP/S:" + new BigDecimal(time * 1000).divide(new BigDecimal(spend), 2, BigDecimal.ROUND_HALF_UP));
System.out.println("## Expend Time:" + spend);
Util.close(context);
}
use of com.firenio.component.IoEventHandle in project baseio by generallycloud.
the class TestLoadServer method main.
public static void main(String[] args) throws Exception {
Options.setBufAutoExpansion(AUTO_EXPANSION);
Options.setEnableEpoll(ENABLE_EPOLL);
Options.setEnableUnsafeBuf(ENABLE_UNSAFE_BUF);
IoEventHandle eventHandle = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame f) throws Exception {
String text = f.getStringContent();
if (BUFFERED_WRITE) {
ByteBuf buf = ch.getAttribute(WRITE_BUF);
if (buf == null) {
buf = ch.allocate();
ByteBuf temp = buf;
ch.setAttribute(WRITE_BUF, buf);
ch.getEventLoop().submit(() -> {
ch.writeAndFlush(temp);
ch.setAttribute(WRITE_BUF, null);
});
}
byte[] data = text.getBytes(ch.getCharset());
buf.writeInt(data.length);
buf.writeBytes(data);
} else {
f.setString(text, ch);
ch.writeAndFlush(f);
}
}
};
NioEventLoopGroup group = new NioEventLoopGroup(SERVER_CORE_SIZE);
group.setMemoryCapacity(1024 * 512 * MEM_UNIT * SERVER_CORE_SIZE);
group.setWriteBuffers(WRITE_BUFFERS);
group.setMemoryUnit(MEM_UNIT);
group.setEnableMemoryPool(ENABLE_POOL);
ChannelAcceptor context = new ChannelAcceptor(group, 8300);
context.addProtocolCodec(new LengthValueCodec());
context.setIoEventHandle(eventHandle);
if (ENABLE_SSL) {
// context.setSslPem("localhost.key;localhost.crt");
}
context.addChannelEventListener(new LoggerChannelOpenListener());
if (ENABLE_WORK_EVENT_LOOP) {
context.setExecutorGroup(new ThreadEventLoopGroup("ep", 1024 * 256 * CLIENT_CORE_SIZE));
}
context.bind();
}
use of com.firenio.component.IoEventHandle in project baseio by generallycloud.
the class TestSimpleHttpClient method main.
@Test
public void main() throws Exception {
Options.setEnableEpoll(true);
Waiter<String> w = new Waiter<>();
ChannelConnector context = new ChannelConnector("firenio.com", 443);
SslContext sslContext = SslContextBuilder.forClient(true).build();
context.addProtocolCodec(new ClientHttpCodec());
context.addProtocolCodec(new WebSocketCodec());
context.setIoEventHandle(new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) {
ClientHttpFrame res = (ClientHttpFrame) frame;
System.out.println();
System.out.println(new String(res.getBytesContent()));
System.out.println();
Util.close(context);
w.call(new String(res.getBytesContent()), null);
}
});
context.addChannelEventListener(new LoggerChannelOpenListener());
context.setSslContext(sslContext);
long start = Util.now();
Channel ch = context.connect(3000);
ch.writeAndFlush(new ClientHttpFrame("/test?p=2222"));
w.await(3000);
System.out.println(Util.past(start));
Assert.assertEquals("yes server already accept your message :) {p=2222}", w.getResponse());
}
Aggregations