Search in sources :

Example 1 with ChannelAcceptor

use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.

the class TestHttpLoadServerTFB method main.

public static void main(String[] args) throws Exception {
    System.setProperty("core", "1");
    System.setProperty("frame", "16");
    System.setProperty("readBuf", "512");
    System.setProperty("pool", "true");
    System.setProperty("inline", "true");
    System.setProperty("level", "1");
    System.setProperty("read", "false");
    System.setProperty("epoll", "true");
    System.setProperty("nodelay", "true");
    System.setProperty("cachedurl", "true");
    System.setProperty("unsafeBuf", "false");
    boolean lite = Util.getBooleanProperty("lite");
    boolean read = Util.getBooleanProperty("read");
    boolean pool = Util.getBooleanProperty("pool");
    boolean epoll = Util.getBooleanProperty("epoll");
    boolean direct = Util.getBooleanProperty("direct");
    boolean nodelay = Util.getBooleanProperty("nodelay");
    boolean cachedurl = Util.getBooleanProperty("cachedurl");
    boolean unsafeBuf = Util.getBooleanProperty("unsafeBuf");
    int core = Util.getIntProperty("core", 1);
    int frame = Util.getIntProperty("frame", 16);
    int level = Util.getIntProperty("level", 1);
    int readBuf = Util.getIntProperty("readBuf", 16);
    LoggerFactory.setEnableSLF4JLogger(false);
    LoggerFactory.setLogLevel(LoggerFactory.LEVEL_INFO);
    Options.setBufAutoExpansion(false);
    Options.setChannelReadFirst(read);
    Options.setEnableEpoll(epoll);
    Options.setEnableUnsafeBuf(unsafeBuf);
    DebugUtil.info("lite: {}", lite);
    DebugUtil.info("read: {}", read);
    DebugUtil.info("pool: {}", pool);
    DebugUtil.info("core: {}", core);
    DebugUtil.info("epoll: {}", epoll);
    DebugUtil.info("frame: {}", frame);
    DebugUtil.info("level: {}", level);
    DebugUtil.info("readBuf: {}", readBuf);
    DebugUtil.info("nodelay: {}", nodelay);
    DebugUtil.info("cachedurl: {}", cachedurl);
    DebugUtil.info("unsafeBuf: {}", unsafeBuf);
    int processors = Util.availableProcessors() * core;
    int fcache = 1024 * 16;
    int pool_unit = 256 * 16;
    int pool_cap = 1024 * 8 * pool_unit * processors;
    String server = "firenio";
    ByteTree cachedUrls = null;
    if (cachedurl) {
        cachedUrls = new ByteTree();
        cachedUrls.add("/plaintext");
        cachedUrls.add("/json");
    }
    HttpCodec codec = new HttpCodec(server, fcache, lite, cachedUrls) {

        @Override
        protected Object newAttachment() {
            return new MyHttpAttachment();
        }
    };
    IoEventHandle eventHandle = new IoEventHandle() {

        @Override
        public void accept(Channel ch, Frame frame) throws Exception {
            HttpFrame f = (HttpFrame) frame;
            String action = f.getRequestURL();
            if ("/plaintext".equals(action)) {
                MyHttpAttachment att = (MyHttpAttachment) ch.getAttachment();
                ByteBuf buf = att.write_buf;
                if (buf == null) {
                    buf = ch.allocate();
                    ByteBuf temp = buf;
                    att.write_buf = buf;
                    ch.getEventLoop().submit(() -> {
                        ch.writeAndFlush(temp);
                        att.write_buf = null;
                    });
                }
                f.setContent(STATIC_PLAINTEXT);
                f.setContentType(HttpContentType.text_plain);
                f.setConnection(HttpConnection.NONE);
                f.setDate(HttpDateUtil.getDateLine());
                codec.encode(ch, buf, f);
                codec.release(ch.getEventLoop(), f);
            } else if ("/json".equals(action)) {
                ByteBuf temp = FastThreadLocal.get().getAttribute(JSON_BUF);
                if (temp == null) {
                    temp = ByteBuf.heap(0);
                    FastThreadLocal.get().setAttribute(JSON_BUF, temp);
                }
                JsonStream stream = JsonStreamPool.borrowJsonStream();
                try {
                    stream.reset(null);
                    stream.writeVal(Message.class, new Message("Hello, World!"));
                    Slice slice = stream.buffer();
                    temp.reset(slice.data(), slice.head(), slice.tail());
                    f.setContent(temp);
                    f.setContentType(HttpContentType.application_json);
                    f.setConnection(HttpConnection.NONE);
                    f.setDate(HttpDateUtil.getDateLine());
                    ch.writeAndFlush(f);
                    ch.release(f);
                } finally {
                    JsonStreamPool.returnJsonStream(stream);
                }
            } else {
                System.err.println("404");
                f.setString("404,page not found!", ch);
                f.setContentType(HttpContentType.text_plain);
                f.setStatus(HttpStatus.C404);
                f.setDate(HttpDateUtil.getDateLine());
                ch.writeAndFlush(f);
                ch.release(f);
            }
        }
    };
    HttpDateUtil.start();
    NioEventLoopGroup group = new NioEventLoopGroup();
    ChannelAcceptor context = new ChannelAcceptor(group, 8081);
    group.setMemoryCapacity(pool_cap);
    group.setEnableMemoryPool(pool);
    group.setMemoryUnit(pool_unit);
    group.setWriteBuffers(8);
    group.setChannelReadBuffer(1024 * readBuf);
    group.setEventLoopSize(Util.availableProcessors() * core);
    group.setConcurrentFrameStack(false);
    if (nodelay) {
        context.addChannelEventListener(new ChannelEventListenerAdapter() {

            @Override
            public void channelOpened(Channel ch) throws Exception {
                ch.setOption(SocketOptions.TCP_NODELAY, 1);
                ch.setOption(SocketOptions.SO_KEEPALIVE, 0);
            }
        });
    }
    context.addProtocolCodec(codec);
    context.setIoEventHandle(eventHandle);
    context.bind(1024 * 8);
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) Frame(com.firenio.component.Frame) HttpFrame(com.firenio.codec.http11.HttpFrame) Channel(com.firenio.component.Channel) ChannelAcceptor(com.firenio.component.ChannelAcceptor) JsonStream(com.jsoniter.output.JsonStream) ByteBuf(com.firenio.buffer.ByteBuf) HttpFrame(com.firenio.codec.http11.HttpFrame) ChannelEventListenerAdapter(com.firenio.component.ChannelEventListenerAdapter) ByteTree(com.firenio.collection.ByteTree) HttpCodec(com.firenio.codec.http11.HttpCodec) Slice(com.jsoniter.spi.Slice) NioEventLoopGroup(com.firenio.component.NioEventLoopGroup)

Example 2 with ChannelAcceptor

use of com.firenio.component.ChannelAcceptor 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();
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) LengthValueCodec(com.firenio.codec.lengthvalue.LengthValueCodec) ThreadEventLoopGroup(com.firenio.concurrent.ThreadEventLoopGroup) Frame(com.firenio.component.Frame) Channel(com.firenio.component.Channel) ChannelAcceptor(com.firenio.component.ChannelAcceptor) ByteBuf(com.firenio.buffer.ByteBuf) NioEventLoopGroup(com.firenio.component.NioEventLoopGroup) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener)

Example 3 with ChannelAcceptor

use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.

the class TestHttp2Server method main.

public static void main(String[] args) throws Exception {
    IoEventHandle eventHandleAdaptor = new IoEventHandle() {

        @Override
        public void accept(Channel ch, Frame frame) throws Exception {
            frame.write("Hello World", ch);
            ch.writeAndFlush(frame);
        }
    };
    NioEventLoopGroup group = new NioEventLoopGroup();
    group.setMemoryCapacity(1024 * 1024 * 4);
    group.setMemoryUnit(512);
    group.setEnableMemoryPool(true);
    ChannelAcceptor context = new ChannelAcceptor(group, 443);
    context.addProtocolCodec(new Http2Codec());
    context.setIoEventHandle(eventHandleAdaptor);
    // context.setApplicationProtocols(new String[]{"h2", "http/1.1"});
    context.addChannelEventListener(new LoggerChannelOpenListener());
    context.bind();
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) Frame(com.firenio.component.Frame) Channel(com.firenio.component.Channel) ChannelAcceptor(com.firenio.component.ChannelAcceptor) NioEventLoopGroup(com.firenio.component.NioEventLoopGroup) Http2Codec(com.firenio.codec.http2.Http2Codec) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener)

Example 4 with ChannelAcceptor

use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.

the class TestLengthValueServer method main.

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();
}
Also used : IoEventHandle(com.firenio.component.IoEventHandle) LengthValueCodec(com.firenio.codec.lengthvalue.LengthValueCodec) Frame(com.firenio.component.Frame) Channel(com.firenio.component.Channel) ChannelAcceptor(com.firenio.component.ChannelAcceptor) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener)

Example 5 with ChannelAcceptor

use of com.firenio.component.ChannelAcceptor in project baseio by generallycloud.

the class NetDataTransferServer method startup.

public synchronized void startup(NioEventLoopGroup group, int port) throws Exception {
    ChannelAcceptor context = new ChannelAcceptor(group, port);
    context.addProtocolCodec(new NetDataTransfer());
    context.addChannelIdleEventListener(new ChannelAliveListener());
    context.addChannelEventListener(new LoggerChannelOpenListener());
    context.addChannelEventListener(new CountChannelListener());
    context.addChannelEventListener(CLOSE_TARGET);
    context.bind();
}
Also used : ChannelAliveListener(com.firenio.component.ChannelAliveListener) ChannelAcceptor(com.firenio.component.ChannelAcceptor) CountChannelListener(sample.http11.service.CountChannelListener) LoggerChannelOpenListener(com.firenio.component.LoggerChannelOpenListener)

Aggregations

ChannelAcceptor (com.firenio.component.ChannelAcceptor)11 LoggerChannelOpenListener (com.firenio.component.LoggerChannelOpenListener)10 Channel (com.firenio.component.Channel)9 Frame (com.firenio.component.Frame)8 IoEventHandle (com.firenio.component.IoEventHandle)8 NioEventLoopGroup (com.firenio.component.NioEventLoopGroup)5 HttpCodec (com.firenio.codec.http11.HttpCodec)3 HttpFrame (com.firenio.codec.http11.HttpFrame)3 LengthValueCodec (com.firenio.codec.lengthvalue.LengthValueCodec)3 ByteBuf (com.firenio.buffer.ByteBuf)2 WebSocketCodec (com.firenio.codec.http11.WebSocketCodec)2 Http2Codec (com.firenio.codec.http2.Http2Codec)2 ChannelAliveListener (com.firenio.component.ChannelAliveListener)2 ChannelEventListenerAdapter (com.firenio.component.ChannelEventListenerAdapter)2 ThreadEventLoopGroup (com.firenio.concurrent.ThreadEventLoopGroup)2 CountChannelListener (sample.http11.service.CountChannelListener)2 LifeCycle (com.firenio.LifeCycle)1 LifeCycleListener (com.firenio.LifeCycleListener)1 ClientHttpCodec (com.firenio.codec.http11.ClientHttpCodec)1 ClientHttpFrame (com.firenio.codec.http11.ClientHttpFrame)1