BaseIO is an io framework which can build network project fast, it based on java nio/aio, it is popular with Developers because of simple and easy of use APIs and high-performance.
- easy to support reconnect (easy to support heart beat)
- simple application container
- simple hot deploy , eg: https://www.generallycloud.com/system-redeploy
- support deploy http , micro service (depend on your protocol)
- easy to supprot load balance, known:
- virtual node based on hash
- loop balance node
- support protocol extend, known:
- Redis protocol, for detail {baseio-test}
- Protobuf protocol, for detail {baseio-test}
- LineBased protocol, for detail {baseio-test}
- FixedLength protocol, for detail {baseio-test}
- HTTP1.1 protocol, for detail: https://www.generallycloud.com/
- WebSocket protocol, for detail: https://www.generallycloud.com/web-socket/chat/index.html
- Protobase(custom) support text and binay and text binay mixed transfer, for detail {baseio-test}
- load test
- over 200W QPS (Http1.1,I7-4790,16.04.1-Ubuntu) wrk load test
- Maven Dependency
<dependency>
<groupId>com.generallycloud</groupId>
<artifactId>baseio-all</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
- A simple server:
public static void main(String[] args) throws Exception {
IoEventHandleAdaptor eventHandleAdaptor = new IoEventHandleAdaptor() {
@Override
public void accept(SocketSession session, Future future) throws Exception {
future.write("yes server already accept your message:");
future.write(future.getReadText());
session.flush(future);
}
};
SocketChannelContext context = new NioSocketChannelContext(new ServerConfiguration(18300));
//use java aio
// SocketChannelContext context = new AioSocketChannelContext(new ServerConfiguration(18300));
SocketChannelAcceptor acceptor = new SocketChannelAcceptor(context);
context.addSessionEventListener(new LoggerSocketSEListener());
context.setIoEventHandleAdaptor(eventHandleAdaptor);
context.setProtocolFactory(new FixedLengthProtocolFactory());
acceptor.bind();
}
- A simple client:
public static void main(String[] args) throws Exception {
IoEventHandleAdaptor eventHandleAdaptor = new IoEventHandleAdaptor() {
@Override
public void accept(SocketSession session, Future future) throws Exception {
System.out.println();
System.out.println("____________________" + future.getReadText());
System.out.println();
}
};
SocketChannelContext context = new NioSocketChannelContext(new ServerConfiguration("localhost", 18300));
//use java aio
// SocketChannelContext context = new AioSocketChannelContext(new ServerConfiguration(18300));
SocketChannelConnector connector = new SocketChannelConnector(context);
context.setIoEventHandleAdaptor(eventHandleAdaptor);
context.addSessionEventListener(new LoggerSocketSEListener());
context.setProtocolFactory(new FixedLengthProtocolFactory());
SocketSession session = connector.connect();
FixedLengthFuture future = new FixedLengthFutureImpl(context);
future.write("hello server!");
session.flush(future);
ThreadUtil.sleep(100);
CloseUtil.close(connector);
}
- HTTP Demo:https://www.generallycloud.com/index.html
- WebSocket Chat Demo:https://www.generallycloud.com/web-socket/chat/index.html
(server based on baseio,client based on: https://github.com/socketio/socket.io/ ) - WebSocket Rumpetroll Demo:https://www.generallycloud.com/web-socket/rumpetroll/index.html
(server based on baseio,client based on:https://github.com/danielmahal/Rumpetroll )
BaseIO is released under the Apache License 2.0.