FireNio / firenio

🐳🐳An easy of use io framework project based on java nio&epoll
https://firenio.com(No Served)
Apache License 2.0
349 stars 93 forks source link

EPoll mode only support unsafe(direct) memory #48

Closed jerryc05 closed 5 years ago

jerryc05 commented 5 years ago

在linux的jdk13上运行hello world报如下错误:

Exception in thread "main" java.lang.Exception: EPoll mode only support unsafe(direct) memory
        at com.firenio.component.NioEventLoopGroup.doStart(NioEventLoopGroup.java:112)
        at com.firenio.LifeCycle.start(LifeCycle.java:130)
        at com.firenio.common.Util.start(Util.java:479)
        at com.firenio.component.ChannelContext.doStart(ChannelContext.java:128)
        at com.firenio.LifeCycle.start(LifeCycle.java:130)
        at com.firenio.common.Util.start(Util.java:479)
        at com.firenio.component.ChannelAcceptor.bind$13462e(ChannelAcceptor.java:84)
        at org.umdCssa.HelloWorld.main(HelloWorld.java:1069)
wangkaish commented 5 years ago

支持java9及java11的,目前Epoll模式下仅支持堆外内存,需要做下group.setEnableMemoryPoolDirect(direct);

jerryc05 commented 5 years ago

@wangkaish 比如以readme里面simple server那个为例,我应该怎么设置setEnableMemoryPoolDirect()?

wangkaish commented 5 years ago

@jerryc05 抱歉,readme里的有误,忘记改掉了,近期改掉,参考一下下面这么写

        NioEventLoopGroup group = new NioEventLoopGroup();
        group.setEnableMemoryPoolDirect(true);
        ChannelAcceptor context = new ChannelAcceptor(group,8300);
jerryc05 commented 5 years ago

@wangkaish 好的我明后天试试。顺便说一下readme里simple server的f.getStringContent()有可能返回null,需要判null或者用Optional.ofNullable()封装。

希望这个项目能写几页教程供参考,不然有些概念不大理解,也不大会用。

wangkaish commented 5 years ago

@jerryc05 仅在示例中理论上不会出现null的情况,实际使用中可以由使用者自行判断。 关于教程,因为之前程序API可能需要经常变动,一直也没怎么写文档教程,后面API几乎不会变的时候会考虑写些教程,但是预计也不会太多。

jerryc05 commented 5 years ago

@wangkaish 考虑使用annotation标注一下吗?比如给个@Nullable

wangkaish commented 5 years ago

@jerryc05 我是这么考虑的,Frame中content一般是双方约定的内容(包括Frame的扩展类),具体是否为空或者是否允许为空双方是可以明确的,比如像心跳,标志等类型的消息,可能由扩展类的其他属性来做标记,本身content为空,如果是数据载体,conent可能就是具体的数据,这由使用者操作就行。

wangkaish commented 5 years ago

@jerryc05 不过还是很感谢你的建议。