对于IO,除了传统的块IO外,最常用的是Nio。通常,Netty程序中最常用的是Nio,例如Nioeeeventlooproup,Nioserversocketchannel,等等。
我们还知道,IO的IO方法比IO中的NIO更快,例如Kqueue和Epoll,但是这两种方法需要对本机方法的支持,也就是说,它需要在操作系统级别提供服务。
如果我们支持Kqueue或Epoll服务器,Netty可以为这些出色的IO提供支持吗?
答案是肯定的。但是首先是kqueue和epoll需要JNI支持,这意味着Java程序需要调用本地本机方法。
如果您想使用本机传输方法Kequeue和Epoll,我们需要添加其他项目依赖性。如果是Linux环境,则可以添加以下Maven依赖性:
该版本需要匹配您使用的Netty版本号,否则调用可能异常。
分类器代表系统体系结构,其值可以是Linux-X86_64或Linux-Aarch_64。
如果使用Mac系统,则可以介绍以下内容:
除了一个单独的单独包外,Netty还拥有全部的Netty All Package。如果您在一个软件包中使用所有这些,则无需添加其他本机依赖项。
如果您不使用Netty提供的系统体系结构,则需要手动编译。以下是程序包取决于汇编。如果在RHEL/CentOS/Fedora系统中,请使用:
如果在Debian/Ubuntu系统中,请使用:
如果在MacOS/BSD系统中,请使用:
安装依赖关系包后,我们可以在Netty中使用这些本机传输协议。
本机传输协议的使用基本与使用NIO相同。我们只需要在下面替换。
如果在Liunx系统中,则执行以下更换:
如果在MAC系统中,则执行以下更换:
在这里,我们仍然以熟悉的聊天服务为例。首先,如何基于Kqueue编写Netty服务器:
像Nio一样,我们需要使用Kqueueeventloopgroup创建两个EventloopGroup,一个是Bossground,另一个是WorkerGroup。
然后将这两个组传递到ServerBootstrap中,然后将KqueueserSocketchannel添加为频道。
其他内容与Nio服务器的内容相同。
接下来,让我们看看如何基于Netty客户端基于Kqueue建立与服务器端的连接:
这里使用Kqueueeventloopgroup,并将KqueueeeeventloopGroup放置在引导程序中,并提供了一致的服务器的Kqueuesocketchannel。
然后,客户给香奈儿(Chanel)写了一条消息。在这里,我们直接从命令行进入:
上面的代码意味着将命令行收到的消息写入通道。如果您输入“再见”,请关闭频道。
为了处理字符串,这里使用了三个编码解码器:此处:
它们是行分裂器,字符编码器和角色解码器。
运行并查看,程序还可以,客户端和服务器可以通信。
在这里,我们仅介绍Netty中本机传输协议的使用。可以使用特定代码。您可以参考:
学习netty4
有关更多内容,请参考http://www.flydean.com/52- netty-native-transport-md/
最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!
欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!
原始:https://juejin.cn/post/7101610658185084936