use of com.firenio.component.ChannelConnector in project baseio by generallycloud.
the class TestLengthValueClientPush method main.
@SuppressWarnings("resource")
public static void main(String[] args) throws Exception {
IoEventHandle eventHandleAdaptor = new IoEventHandle() {
@Override
public void accept(Channel ch, Frame frame) throws Exception {
System.out.println(">msg from server: " + frame);
}
};
ChannelConnector context = new ChannelConnector(8300);
context.setIoEventHandle(eventHandleAdaptor);
context.addChannelEventListener(new LoggerChannelOpenListener());
context.addProtocolCodec(new LengthValueCodec());
Channel ch = context.connect();
Util.exec(() -> {
System.out.println("************************************************");
System.out.println("提示:");
System.out.println("list(获取所有客户端id)");
System.out.println("id(获取当前客户端id)");
System.out.println("push id msg(推送消息到)");
System.out.println("broadcast msg(广播消息)");
System.out.println("exit(退出客户端)");
System.out.println("仅用于演示,msg请勿包含空格");
System.out.println("************************************************");
Scanner scanner = new Scanner(System.in);
for (; ; ) {
System.out.println(">");
String line = scanner.nextLine();
if ("exit".equals(line)) {
Util.close(ch);
break;
}
LengthValueFrame frame = new LengthValueFrame();
frame.write(line, ch);
try {
ch.writeAndFlush(frame);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
use of com.firenio.component.ChannelConnector 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.ChannelConnector 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.ChannelConnector 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.ChannelConnector 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