firenio icon indicating copy to clipboard operation
firenio copied to clipboard

🐳🐳An easy of use io framework project based on java nio&epoll

FireNio Project

Website Maven central License

FireNio是基于java nio开发的一款可快速构建网络通讯项目的异步IO框架,其以简单易用的API和优良的性能深受开发者喜爱。

项目特色

  • 支持协议扩展,已知的扩展协议有:
    • LengthValue协议,支持传输文本数据
    • HTTP1.1协议(lite),示例: https://www.firenio.com/
    • WebSocket协议,示例: https://www.firenio.com/web-socket/chat/index.html
    • Protobase(自定义协议),支持传输文本或二进制数据
  • 轻松实现断线重连(轻松实现心跳机制)
  • 支持SSL(JdkSSL & OpenSSL)
  • TFB压力测试

快速入门

  • Maven引用:
	<dependency>
		<groupId>com.firenio</groupId>
		<artifactId>firenio-all</artifactId>
		<version>1.3.6</version>
	</dependency>  
  • Simple Server:

  public static void main(String[] args) throws Exception {

      IoEventHandle eventHandleAdaptor = new IoEventHandle() {

          @Override
          public void accept(Channel ch, Frame f) throws Exception {
              String text = f.getStringContent();
              f.setContent(ch.allocateWithSkipHeader(1));
              f.write("yes server already accept your message:", ch);
              f.write(text, ch);
              ch.writeAndFlush(f);
          }
      };
      ChannelAcceptor context = new ChannelAcceptor(8300);
      context.addChannelEventListener(new LoggerChannelOpenListener());
      context.setIoEventHandle(eventHandleAdaptor);
      context.addProtocolCodec(new LengthValueCodec());
      context.bind();
  }

  • Simple Client:

  public static void main(String[] args) throws Exception {
      ChannelConnector context = new ChannelConnector("127.0.0.1", 8300);
      IoEventHandle eventHandle = new IoEventHandle() {
          @Override
          public void accept(Channel ch, Frame f) throws Exception {
              System.out.println();
              System.out.println("____________________" + f.getStringContent());
              System.out.println();
              context.close();
          }
      };

      context.setIoEventHandle(eventHandle);
      context.addChannelEventListener(new LoggerChannelOpenListener());
      context.addProtocolCodec(new LengthValueCodec());
      Channel          ch    = context.connect(3000);
      LengthValueFrame frame = new LengthValueFrame();
      frame.setString("hello server!", ch);
      ch.writeAndFlush(frame);
  }

更多样例详见 {firenio-test}

演示及用例

  • HTTP Demo:https://www.firenio.com/index.html
  • WebSocket聊天室 Demo:https://www.firenio.com/web-socket/chat/index.html
    (后端基于firenio,前端基于:https://github.com/socketio/socket.io/ )
  • WebSocket小蝌蚪 Demo:https://www.firenio.com/web-socket/rumpetroll/index.html
    (后端基于firenio,前端基于:https://github.com/danielmahal/Rumpetroll )

License

FireNio is released under the Apache License 2.0.